#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,a[200005],cnt[3],num[3],ans[200005][3];
ll pre[200005],sm[3],Sm;
void solve(){
sm[0]=sm[1]=sm[2]=num[0]=num[1]=num[2]=Sm=0;
cin>>n>>cnt[0]>>cnt[1]>>cnt[2];
for(int i=1;i<=n;i++)cin>>a[i],Sm+=a[i];
Sm=(Sm-1)/2;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
for(int i=0;i<3;i++)
if(pre[cnt[i]]>Sm){
cout<<"NO\n";
return;
}
bool flg=0;
for(int i=0;i<3;i++)
if(pre[cnt[i]-1]+a[n]<=Sm)flg=1;
if(!flg){
cout<<"NO\n";
return;
}
for(int i=n;i>=1;i--){
int id=-1;
for(int j=0;j<3;j++)
if(num[j]!=cnt[j])
if(sm[j]+a[i]+pre[cnt[j]-num[j]-1]<=Sm){
flg=(i==1);
for(int k=0;k<3;k++)
if(num[k]+(j==k)!=cnt[k])
if(sm[k]+a[i]*(j==k)+a[i-1]+pre[cnt[k]-num[k]-(j==k)-1]<=Sm)flg=1;
if(flg)id=j;
}
if(id==-1){
cout<<"NO"<<i<<"\n";
return;
}
ans[++num[id]][id]=a[i];
sm[id]+=a[i];
}
cout<<"YES\n";
for(int i=0;i<3;i++){
for(int j=1;j<=cnt[i];j++)cout<<ans[j][i]<<" ";
cout<<'\n';
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
int T;cin>>T;while(T--)solve();
return 0;
}