#include<bits/stdc++.h>
//#define int  long long
using namespace std;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n,m;
	cin>>n>>m;
	vector<int>a(n),b(m);
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	bool ok=true;
	for(int i=0;i<m;i++){
		cin>>b[i];
	}
	sort(a.begin(),a.end());
	sort(b.rbegin(),b.rend());
//	for(auto to:a){
//		cout<<to<<' ';
//	}
//	cout<<"\n";
//	for(auto to:b){
//		cout<<to<<' ';
//	}
//	cout<<"\n";
	
	vector<int>vis(m,-1);
	for(int i=0;i<n;i++){
		vector<bool>dp(a[i]+1,false);
		vector<vector<int>>dp2(a[i]+1);
		
		dp[0]=true;
		dp2[0].push_back(-1);
		for(int j=m-1;j>=0;j--){
			if(b[j]>a[i] || vis[j]==1){
				continue;
			}
			for(int w=a[i]-b[j];w>=0;w--){
				if(dp[w]==true){
					dp[w+b[j]]=true;
					if(!dp2[w].empty()){
					dp2[w+b[j]]=dp2[w];
					dp2[w+b[j]].push_back(j);
				}
				}
			}
//			for(int k=0;k<=a[i];k++){
//				if(dp[k]==true){
//					cout<<"1 ";
//				}else cout<<"0 ";
//			}
		}
		if(dp[a[i]]==true){
				for(int to:dp2[a[i]]){
					if(to==-1) continue;
//					cout<<to<<' ';
					vis[to]=1;
				}
//			cout<<"\n";
		}else{
			ok=false;
			break;
		}
	}
	if(ok==true){
		cout<<"YES";
	}else{
		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... |