#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
vector<int> a(N), b(M);
for (int &x : a) cin >> x;
for (int &x : b) cin >> x;
sort(a.rbegin(), a.rend());
int FULL = 1 << M;
vector<int> sum(FULL, 0);
for (int mask = 1; mask < FULL; mask++) {
int bit = __builtin_ctz(mask);
sum[mask] = sum[mask ^ (1 << bit)] + b[bit];
}
// good[i] = all subsets whose sum = a[i]
vector<vector<int>> good(N);
for (int mask = 1; mask < FULL; mask++) {
for (int i = 0; i < N; i++) {
if (sum[mask] == a[i]) {
good[i].push_back(mask);
}
}
}
queue<pair<int,int>> q;
// (used_mask, satisfied_customers)
vector<vector<int>> vis(FULL, vector<int>(N + 1, 0));
q.push({0, 0});
vis[0][0] = 1;
while (!q.empty()) {
auto [mask, id] = q.front();
q.pop();
if (id == N) {
cout << "YES\n";
return 0;
}
for (int sub : good[id]) {
if (mask & sub) continue;
int nmask = mask | sub;
if (!vis[nmask][id + 1]) {
vis[nmask][id + 1] = 1;
q.push({nmask, id + 1});
}
}
}
cout << "NO\n";
}