#include <bits/stdc++.h>
#define int long long
#define float long double
#define pii pair<int, int>
#define tii tuple<int, int, int>
#define f first
#define s second
#define ve vector
#define emb emplace_back
#define em emplace
using namespace std;
const int inf = 1e18;
const int mod = 1e9 + 7;
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int n, m;
cin >> n >> m;
ve<int> a(n), b(m);
for (auto &e : a) cin >> e;
for (auto &e : b) cin >> e;
ve<pii> dp((1 << m), {-1, -1});
dp[0] = {0, 0};
bool ok = false;
function<pii(int)> solve = [&](int mask) {
if (ok) return make_pair(0LL, 0LL);
if (dp[mask].f != -1) return dp[mask];
pii ans = {0, 0};
for (int i = 0; i < m; i++) {
if (!(mask & (1 << i))) continue;
pii prev = solve(mask & ~(1 << i)), t;
if (ok) return make_pair(0LL, 0LL);
if (prev.s + b[i] == a[prev.f]) t = {prev.f+1, 0};
else t = {prev.f, prev.s + b[i]};
ans = max(ans, t);
if (ans.f == n) { ok = true; return make_pair(0LL, 0LL); }
}
return dp[mask] = ans;
};
solve((1 << m) - 1);
cout << (ok ? "YES" : "NO");
}