#include using namespace std; int na,nb,nc,n; int sorta[200005]; long long pre[200005]; vector big; vector small; int bigSize; long long ta=0,tb=0,tc=0; int ca=0,cb=0,cc=0; vector A,B,C; bool foundans=false; void generateAns(vector &AA, vector &BB, vector &CC, int needa, int needb, int needc) { long long suma=0,sumb=0,sumc=0; for (auto it : AA) suma+=it; for (auto it : BB) sumb+=it; for (auto it : CC) sumc+=it; for (int i=1;i<=needa;i++) suma+=sorta[i]; for (int i=needa+1;i<=needa+needb;i++) sumb+=sorta[i]; for (int i=needa+needb+1;i<=needa+needb+needc;i++) sumc+=sorta[i]; if (suma+sumb<=sumc) return; if (suma+sumc<=sumb) return; if (sumb+sumc<=suma) return; foundans=true; for (int i=1;i<=needa;i++) AA.push_back(sorta[i]); for (int i=needa+1;i<=needa+needb;i++) BB.push_back(sorta[i]); for (int i=needa+needb+1;i<=needa+needb+needc;i++) CC.push_back(sorta[i]); } void rekurcina(int i) { if (foundans) return; if (i==bigSize) { int needa=na-ca; int needb=nb-cb; int needc=nc-cc; if (needa<0 || needb<0 || needc<0) return; //govno od zadatka if (ta<=tb && ta<=tc && tb<=tc) { if (ta+tb+pre[needa+needb]>tc+pre[needa+needb+needc]-pre[needa+needb]) { generateAns(A,B,C,needa,needb,needc); return; } } else if (ta<=tb && ta<=tc && tc<=tb) { if (ta+tc+pre[needa+needc]>tb+pre[needa+needb+needc]-pre[needa+needc]) { generateAns(A,C,B,needa,needc,needb); return; } } else if (tb<=ta && tb<=tc && ta<=tc) { if (tb+ta+pre[needb+needa]>tc+pre[needa+needb+needc]-pre[needb+needa]) { generateAns(B,A,C,needb,needa,needc); return; } } else if (tb<=ta && tb<=tc && tc<=ta) { if (tb+tc+pre[needb+needc]>ta+pre[needa+needb+needc]-pre[needb+needc]) { generateAns(B,C,A,needb,needc,needa); return; } } else if (tc<=ta && tc<=tb && ta<=tb) { if (tc+ta+pre[needc+needa]>tb+pre[needa+needb+needc]-pre[needc+needa]) { generateAns(C,A,B,needc,needa,needb); return; } } else { if (tc+tb+pre[needc+needb]>ta+pre[needa+needb+needc]-pre[needc+needb]) { generateAns(C,B,A,needc,needb,needa); return; } } return; } ta+=big[i]; ca++; A.push_back(big[i]); rekurcina(i+1); if (foundans) return; A.pop_back(); ta-=big[i]; ca--; tb+=big[i]; cb++; B.push_back(big[i]); rekurcina(i+1); if (foundans) return; B.pop_back(); tb-=big[i]; cb--; tc+=big[i]; cc++; C.push_back(big[i]); rekurcina(i+1); if (foundans) return; C.pop_back(); tc-=big[i]; cc--; } int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin>>t; while (t--) { A.clear(),B.clear(),C.clear(); ta=0,tb=0,tc=0; ca=0,cb=0,cc=0; foundans=false; big.clear(); small.clear(); cin>>n>>na>>nb>>nc; vector x(n); for (int i=0;i>x[i]; long long s=0; for (auto it : x) s+=it; for (auto it : x) if (it>=s/12) { big.push_back(it); } else { small.push_back(it); } int m=(int)small.size(); for (int i=1;i<=m;i++) sorta[i]=small[i-1]; sort(sorta+1,sorta+m+1); reverse(sorta+1,sorta+m+1); for (int i=1;i<=m;i++) pre[i]=pre[i-1]+sorta[i]; bigSize=(int)big.size(); rekurcina(0); if (!foundans) { cout<<"NO\n"; continue; } //cout<<"KAKO?! "; //for (int i=1;i<=m;i++) cout<