#include #define N 200005 using namespace std; int n; int arr[N]; multiset groups[5]; long long sums[5]; bool check(){ long long maxi = 0; long long t = 0; for(int i = 0; i < 3;i++){ maxi = max(maxi, sums[i]); t += sums[i]; } if(maxi >= t - maxi){ return 0; } return 1; } bool ok = 0; bool f(vector v, vector ord){ vector tmp = v; for(int i = 0;i < 3;i++){ v[i] = tmp[ord[i]]; } long long sum = 0; for(int i = 1;i <= n;i++){ sum += arr[i]; } int p = 2; int last = 1; for(int i = 0; i < 3;i++){ groups[i].clear(); sums[i] = 0; for(int j = 1; j <= v[i]; j++){ groups[i].insert(arr[last]); sums[i] += arr[last++]; } } while(!check()){ int del = *groups[p].rbegin(); int del2 = -1; for(int i = 0;i < 2;i++){ del2 = *groups[i].begin(); groups[p].erase(groups[p].find(del)); sums[p] -= del; groups[i].erase(groups[i].find(del2)); sums[i] -= del2; groups[i].insert(del); sums[i] += del; groups[p].insert(del2); sums[p] += del2; if(check()){ break; } groups[p].erase(groups[p].find(del2)); sums[p] -= del2; groups[i].erase(groups[i].find(del)); sums[i] -= del; groups[i].insert(del2); sums[i] += del2; groups[p].insert(del); sums[p] += del; } if(check()) break; if(*groups[0].begin() < *groups[1].begin()){ del2 = *groups[0].begin(); groups[p].erase(groups[p].find(del)); sums[p] -= del; groups[0].erase(groups[0].find(del2)); sums[0] -= del2; groups[0].insert(del); sums[0] += del; groups[p].insert(del2); sums[p] += del2; } else{ del2 = *groups[1].begin(); groups[p].erase(groups[p].find(del)); sums[p] -= del; groups[1].erase(groups[1].find(del2)); sums[1] -= del2; groups[1].insert(del); sums[1] += del; groups[p].insert(del2); sums[p] += del2; } if(del2 >= del) break; } if(!check()) return 0; ok = 1; cout << "YES" << endl; for(int i = 0;i < 3;i++){ int num = -1; for(int j = 0; j< 3;j++){ if(ord[j] == i) num = j; } // cout << "HEY" << num << endl; for(auto u:groups[num]){ cout << u << ' '; } cout << endl; } return 1; } void solve(){ int a, b, c; cin >> n >> a >> b >> c; long long sum = 0; for(int i = 1;i <= n;i++){ cin >> arr[i]; sum += arr[i]; } sort(arr + 1, arr + n + 1); vector v = {a, b, c}; vector ord = {0, 1, 2}; ok = 0; int p = 0; for(int i = 1; i < 3;i++){ if(v[i] < v[p]) p = i; } long long sum2 = arr[n]; for(int i = 1;i < v[p];i++){ sum2 += arr[i]; } if(sum2 >= sum - sum2){ cout << "NO" << endl; return; } do{ if(f(v, ord)){ break; } }while(next_permutation(ord.begin(), ord.end())); if(!ok){ cout << "NO" << endl; } } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); int t = 1; cin >> t; // comment if not multitest while(t--) solve(); }