#include using namespace std; typedef long long ll; #define fi first #define se second int n; pairgn[3]; ll x[200005]; ll p[200005]; bool used[200005]; vectorans[3]; void solve(){ cin >> n; for(int i=0; i<3 ;i++){ cin >> gn[i].fi; gn[i].se=i; ans[i].clear(); } sort(gn,gn+3); for(int i=1; i<=n ;i++){ cin >> x[i]; used[i]=false; } sort(x+1,x+n+1); for(int i=1; i<=n ;i++) p[i]=p[i-1]+x[i]; ll sum=p[n]; int na=gn[0].fi; int nb=gn[1].fi; int nc=gn[2].fi; int a=gn[0].se; int b=gn[1].se; int c=gn[2].se; if((p[n]-p[n-na])*2>=sum){ if((x[n]+p[na-1])*2>=sum){ cout << "NO\n"; return; } ans[a].push_back(x[n]); ll cum=x[n]; int frog=na-1; used[n]=true; for(int i=n-1; i>=1 ;i--){ if(frog>0 && (cum+x[i]+p[frog-1])*2=1 ;i--){ if(used[i]) continue; if(toad>0 && (sumb+x[i]-ans[b][toad-1])*2=sum){ cout << "NO\n"; return; } for(int i=n-na+1; i<=n ;i++){ ans[a].push_back(x[i]); used[i]=true; } if((x[n-na]+p[nb-1])*2>=sum){ cout << "NO\n"; return; } ans[b].push_back(x[n-na]); ll cum=x[n-na]; int frog=nb-1; used[n-na]=true; for(int i=n-na-1; i>=1 ;i--){ if(frog>0 && (cum+x[i]+p[frog-1])*2> t;while(t--) solve(); }