#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int nx = 25;
int n, m;
bool vis[23][1 << 21];
bool pos[23];
int a[nx], b[nx];
int qs[nx];
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
qs[i] = qs[i - 1] + a[i];
}
for (int i = 0; i < m; i++) cin >> b[i];
queue<tuple<int,int,int>> q; // u, sum, bit
q.emplace(1, 0, 0);
vis[1][0] = 1;
while (!q.empty()) {
auto [u, sum, bit] = q.front();
q.pop();
//cout << u << " " << sum << " " << bit << "\n";
for (int i = 0; i < m; i++) {
if ((1 << i) & bit) continue;
int nw = bit | (1 << i);
if (sum + b[i] > qs[u]) continue;
if (sum + b[i] == qs[u]) {
pos[u] = 1;
if (u + 1 > n) continue;
if (vis[u + 1][nw]) continue;
vis[u + 1][nw] = 1;
q.emplace(u + 1, qs[u], nw);
continue;
}
if (vis[u][nw]) continue;
vis[u][nw] = 1;
q.emplace(u, sum + b[i], nw);
}
}
cout << (pos[n] ? "YES" : "NO");
}