#include <iostream>
#include <vector>
#include <map>
using namespace std;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
short p[20];
short b[20];
short n, m;
void read()
{
cin >> n >> m;
for (short i = 0; i < n; i++)
{
cin >> p[i];
}
for (short i = 0; i < m; i++)
{
cin >> b[i];
}
}
const short MAXN = 20100;
vector<short> dp[MAXN + 5];
struct state
{
short sum, i;
int used;
state()
{
sum = i = 0;
used=0;
}
bool operator<(const state &x) const
{
if (i != x.i)
return i < x.i;
if (sum != x.sum)
return sum < x.sum;
return used<x.used;
}
};
map<state, bool> s;
bool rec(state&x)
{
if (s.count(x))
return s[x];
if (x.i == n)
{
s[x] = 1;
return true;
}
if (x.sum == 0)
{
state ne = x;
ne.i = x.i + 1;
ne.sum = p[ne.i];
bool res = rec(ne);
s[x] = res;
return res;
}
for (short&p : dp[x.sum])
{
if ((x.used&(1<<p))==0)
{
x.sum-=b[p];
x.used+=(1<<p);
if (rec(x))
{
s[x]=1;
return true;
}
x.used-=(1<<p);
x.sum+=b[p];
}
}
s[x]=0;
return false;
}
signed main()
{
speed();
read();
dp[0].push_back(-1);
for (short i = 0; i < m; i++)
{
for (short j = MAXN; j >= 0; j--)
{
if (dp[j].size())
{
dp[j + b[i]].push_back(i);
}
}
}
state x;
x.i = 0;
x.sum = p[0];
if (rec(x))
{
cout << "YES" << '\n';
}
else
{
cout << "NO" << '\n';
}
return 0;
}