// source problem : 
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define lb lower_bound
#define ub upper_bound
#define MASK(i) (1LL << (i))
void ckmax(int& f, int s)
{
    f = (f > s ? f : s);
}
void ckmin(int& f, int s)
{
    f = (f < s ? f : s);
}
int a[20], suma = 0, b[20], sumb = 0, n, m;
void solve(int p)
{
    if (suma == 0)
    {
        cout << "YES";
        exit(0);
    }
    if (suma > sumb) return;
    if (p == m) return;
    sumb -= b[p];
    solve(p + 1);
    sumb += b[p];
    for (int i = 0; i < n; i++)
    {
        if (a[i] && a[i] < b[p]) return;
        if (a[i] >= b[p])
        {
            a[i] -= b[p];
            suma -= b[p];
            sumb -= b[p];
            solve(p + 1);
            a[i] += b[p];
            suma += b[p];
            sumb += b[p];
        }
    }
}
int32_t main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i], suma += a[i];
    for (int i = 0; i < m; i++) cin >> b[i], sumb += b[i];
    sort(b, b + m);
    solve(0);
    cout << "NO";
    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... |