#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pii pair <int, int>
#define fi first
#define se second
const int MAXN = 25, POT = (1 << 20) + 5;
bool bl;
int n, arr[MAXN], br[MAXN], dp[MAXN][POT];
vector <int> v[MAXN];
void rek(int idx, int mask) {
	if (idx == n) {bl = 1; return;}
	if (mask == 0) return;
	
	for (auto e : v[idx]) {
		if ((mask & e) != e || dp[idx][(mask ^ e)] == 1) continue;
		dp[idx][(mask ^ e)] = 1;
		rek(idx + 1, (mask ^ e));
	}
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	int m;
	cin >> n >> m;
	
	for (int i = 0; i < n; i++) cin >> arr[i];
	for (int i = 0; i < m; i++) cin >> br[i];
	
	for (int mask = 0; mask < (1 << m); mask++) {
		int zb = 0;
		for (int j = 0; j < m; j++) {
			if (mask & (1 << j)) zb += br[j];
		}
		for (int j = 0; j < n; j++) {
			if (zb == arr[j]) v[j].push_back(mask);
		}
	}
	
	bl = 0;
	rek(0, (1 << m) - 1);
	
	if (bl == 1) cout << "YES\n";
	else cout << "NO\n";
	
	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... |