#include <bits/stdc++.h>
using namespace std;
ifstream fin("bank.in");
ofstream fout("bank.out");
vector<int> a, b;
vector<pair<int,int> > dp;
int main() {
int n, m;
fin>>n>>m;
a.resize(n+1);
b.resize(m+1);
dp.resize(1<<(m+1), {-1, -1});
for (int i=1;i<=n;i++) {
fin>>a[i];
}
for (int i=1;i<=m;i++) {
fin>>b[i];
}
auto build=[&]() {
dp[0]={0, 0};
for (int mask=0;mask<(1<<m);mask++) {
for (int tip=1;tip<=m;tip++) {
if (1<<(tip-1)&mask) continue;
if (dp[mask].first==-1) continue;
int old_val=dp[mask].second, old_prefix=dp[mask].first, new_val=b[tip], new_mask=1<<(tip-1)|mask;
if (old_val+new_val<a[old_prefix+1]) {
dp[new_mask].first=old_prefix;
dp[new_mask].second=old_val+new_val;
}
if (old_val+new_val==a[old_prefix+1]) {
dp[new_mask].first=old_prefix+1;
dp[new_mask].second=0;
}
}
}
};
build();
for (int mask=0;mask<=(1<<m);mask++) {
if (dp[mask].first==n) {
fout<<"YES";
return 0;
}
}
fout<<"NO";
}