#include using namespace std; typedef long long ll; void solve(){ int n, na, nb, nc; cin >> n >> na >> nb >> nc; vector rev = {1, 2, 3}; if(na < nb){ swap(na, nb); swap(rev[0], rev[1]); } if(nb < nc){ swap(nb, nc); swap(rev[1], rev[2]); } if(na < nb){ swap(na, nb); swap(rev[0], rev[1]); } vector v(n); for(auto &x : v)cin >> x; sort(v.rbegin(), v.rend()); vector ans(n, 0); ans[0] = 3; vector su(4, 0); su[3] = v[0]; for(int i = 0; i < nc - 1; ++i){ su[3] += v[n - i - 1]; ans[n - i - 1] = 3; } for(int i = 1; i <= na; ++i){ su[1] += v[i]; ans[i] = 1; } for(int i = na + 1; i <= nb + na; ++i){ su[2] += v[i]; ans[i] = 2; } if(su[3] >= su[1] + su[2]){ cout << "NO\n"; return; } for(int i = 1; i < n - na && (su[1] >= su[2] + su[3] || su[2] >= su[1] + su[3] || su[3] >= su[1] + su[2]); ++i){ su[ans[i]] -= v[i]; su[ans[i + na]] -= v[i + na]; swap(ans[i], ans[i + na]); su[ans[i]] += v[i]; su[ans[i + na]] += v[i + na]; } if(su[1] >= su[2] + su[3] || su[2] >= su[1] + su[3] || su[3] >= su[1] + su[2]){ cout << "NO\n"; return; } cout << "YES\n"; for(int i = 0; i < 3; ++i){ for(int k = 0; k < 3; ++k){ if(rev[k] == i + 1){ for(int j = 0; j < n; ++j){ if(ans[j] == k + 1)cout << v[j] << ' '; } cout << '\n'; } } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--)solve(); }