#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
const int mod = 1e9 + 7;
const int mod2 = 1e9 + 9;
const int N = 200005;
const ll base = 311;
const int BLOCK = 330;
const ll inf = 1e18+100;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
int n,m;
int a[25], b[25];
pair <int,int> dp[1 << 20];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("guard.in", "r", stdin);
// freopen("guard.out", "w", stdout);
cin >> n >> m;
for(int i=0;i<n;i++) cin >> a[i];
for(int i=0;i<m;i++) cin >> b[i];
for(int i=0;i<(1 << m);i++) dp[i] = {-1, -1};
dp[0] = {0,0};
for(int mask=0;mask < (1 << m);mask++){
if(dp[mask].first == -1) continue;
for(int j=0;j<m;j++){
if(!((mask >> j) & 1)){
int nxtMask = mask | (1 << j);
int k = dp[mask].first;
int curVal = dp[mask].second;
if(curVal + b[j] < a[k]){
dp[nxtMask] = max(dp[nxtMask], {k, b[j] + curVal});
}
else if(curVal + b[j] == a[k]){
dp[nxtMask] = max(dp[nxtMask], {k+1, 0});
}
}
}
}
for(int mask=0;mask < (1 << m);mask++){
if(dp[mask].first == n){
cout << "YES";
return 0;
}
}
cout << "NO";
return 0;
}