#include #define pii pair using namespace std; struct mult{ int n, ind; long long sum; vector v; bool operator<(const mult &other)const{ return n > other.n; } }v[4]; int vec[200001]; bool cmp2(mult a, mult b) { return a.ind < b.ind; } void solve() { mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int n; cin >> n >> v[1].n >> v[2].n >> v[3].n; v[1].ind = 1; v[2].ind = 2; v[3].ind = 3; v[1].v.clear(); v[2].v.clear(); v[3].v.clear(); v[1].sum = v[2].sum = v[3].sum = 0; sort(v + 1, v + 4); long long sumTot = 0; for(int i = 1; i <= n; i++) { cin >> vec[i]; sumTot += vec[i]; } sort(vec + 1, vec + n + 1); for(int i = 1; i <= v[1].n; i++) { v[1].v.push_back(vec[i]); v[1].sum += vec[i]; } for(int i = v[1].n + 1; i <= v[1].n + v[2].n; i++) { v[2].v.push_back(vec[i]); v[2].sum += vec[i]; } for(int i = n - v[3].n + 1; i <= n; i++) { v[3].v.push_back(vec[i]); v[3].sum += vec[i]; } if(2LL * v[2].sum >= sumTot) { for(int i = 0; i < v[2].v.size() && 2LL * v[2].sum >= sumTot; i++) { v[1].sum -= v[1].v[i]; v[2].sum -= v[2].v[i]; swap(v[1].v[i], v[2].v[i]); v[1].sum += v[1].v[i]; v[2].sum += v[2].v[i]; } } if(2LL * v[3].sum >= sumTot) { for(int i = 0; i < v[3].v.size() - 1 && 2LL * v[3].sum >= sumTot; i++) { v[2].sum -= v[2].v[i]; v[3].sum -= v[3].v[i]; swap(v[2].v[i], v[3].v[i]); v[2].sum += v[2].v[i]; v[3].sum += v[3].v[i]; } for(int i = 0; i < v[3].v.size() - 1 && 2LL * v[3].sum >= sumTot; i++) { v[1].sum -= v[1].v[i]; v[3].sum -= v[3].v[i]; swap(v[1].v[i], v[3].v[i]); v[1].sum += v[1].v[i]; v[3].sum += v[3].v[i]; } int cnt = 0; for(auto it:v[1].v) vec[++cnt] = it; for(auto it:v[2].v) vec[++cnt] = it; sort(vec + 1, vec + cnt + 1); v[1].sum = 0; v[2].sum = 0; v[1].v.clear(); v[2].v.clear(); for(int i = 1; i <= v[1].n; i++) { v[1].v.push_back(vec[i]); v[1].sum += vec[i]; } for(int i = v[1].n + 1; i <= v[1].n + v[2].n; i++) { v[2].v.push_back(vec[i]); v[2].sum += vec[i]; } for(int i = 0; i < v[2].v.size() && 2LL * v[2].sum >= sumTot; i++) { v[1].sum -= v[1].v[i]; v[2].sum -= v[2].v[i]; swap(v[1].v[i], v[2].v[i]); v[1].sum += v[1].v[i]; v[2].sum += v[2].v[i]; } } sort(v + 1, v + 4, cmp2); for(int i = 1; i <= 3; i++) if(2LL * v[i].sum >= sumTot) { cout << "NO\n"; return; } cout << "YES\n"; for(int i = 1; i <= 3; i++){ for(auto it:v[i].v) cout << it << " "; //cout << v[i].sum << '\n'; cout << '\n'; } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("test.in", "r", stdin); freopen("test.out", "w", stdout); #else #endif int T = 1; cin >> T; while(T--) { solve(); } return 0; }