using
System;
using
System.Linq;
public
class
Program{
static
int
[,] dp =
new
int
[101, 100001];
static
void
memset(
int
[,] dp,
int
x)
{
for
(
int
i = 0; i < dp.GetLength(0); i++)
{
for
(
int
j = 0; j < dp.GetLength(1); j++)
dp[i, j] = -1;
}
}
static
int
recur(
int
i,
int
j,
int
target,
int
[] arr1,
int
[] arr2,
int
N)
{
if
(i == N)
{
if
(j == target)
return
1;
else
return
0;
}
if
(dp[i, j] != -1)
return
dp[i, j];
int
ans = 0;
if
(j + arr1[i] <= target)
ans = recur(i + 1, j + arr1[i], target, arr1, arr2, N);
if
(j + arr2[i] <= target)
ans = Math.Max(ans, recur(i + 1, j + arr2[i], target, arr1, arr2, N));
return
dp[i, j] = ans;
}
static
void
isNewArrayPossible(
int
[] arr1,
int
[] arr2,
int
N,
int
target)
{
memset(dp, -1);
if
(recur(0, 0, target, arr1, arr2, N) == 1)
Console.WriteLine(
"Yes"
);
else
Console.WriteLine(
"No"
);
}
static
void
Main(
string
[] args)
{
int
[] arr1 = { 3, 4 };
int
[] arr2 = { 6, 5 };
int
N = arr1.Length;
int
M = 10;
isNewArrayPossible(arr1, arr2, N, M);
int
[] arr3 = { 10, 10 };
int
[] arr4 = { 100, 100 };
int
N1 = arr3.Length;
int
M1 = 90;
isNewArrayPossible(arr3, arr4, N1, M1);
int
[] arr5 = { 1, 5, 3, 2 };
int
[] arr6 = { 8, 7, 4, 6 };
int
N2 = arr5.Length;
int
M2 = 12;
isNewArrayPossible(arr5, arr6, N2, M2);
}
}