#include <bits/stdc++.h> 
#define ssize(x) (int)x.size() 
using namespace std; 
const int N = 21; 
int n, m; 
int a[N], b[N]; 
unordered_set<int> dp[N]; 
vector<int> config[1001]; 
void solve() {
  cin >> n >> m; 
  for (int i = 1; i <= n; i++) cin >> a[i]; 
  for (int i = 1; i <= m; i++) cin >> b[i]; 
  for (int i = 0; i < (1 << m); i++) {
    int sum = 0; 
    for (int j = 0; j < m; j++) {
      if ((1 << j) & i) {
        sum += b[j + 1]; 
      }
    }
    if (sum <= 1000) config[sum].push_back(i); 
  }
  dp[0].insert(0); 
  for (int i = 1; i <= n; i++) {
    int e = a[i]; 
    for (int j : dp[i - 1]) {
      for (int c : config[e]) {
        if (!(j & c)) {
          dp[i].insert(j | c); 
        }
      }
    }
  }
  cout << (ssize(dp[n]) ? "YES\n" : "NO\n"); 
}
int main() {
  // freopen("bank.in", "r", stdin); 
  // freopen("bank.out", "w", stdout); 
  solve(); 
  return 0; 
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |