#include using namespace std; #define Dv(v) for (auto x : v) cerr << x << ' '; cerr << endl; #define D(x) cerr << #x << " = " << x << ", " using ll = long long; using vi = vector; using vvi = vector; int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { int n; cin >> n; vector> s(3); for (int i = 0; i < 3; ++i) { s[i].second = i; cin >> s[i].first; } sort(s.begin(), s.end()); vector> ans(3); vector v(n); ll totalSum = 0; for (ll& x : v) { cin >> x; totalSum += x; } sort(v.begin(), v.end()); ll limit = (totalSum-1)/2; ll lowSum = 0; for (int i = 0; i < s[2].first; ++i) lowSum += v[i]; if (lowSum > limit) { cout << "NO\n"; continue; } ll highLowSum = v[n-1]; for (int i = 0; i < s[0].first-1; ++i) { highLowSum += v[i]; } if (highLowSum > limit) { cout << "NO\n"; continue; } ll actSum = lowSum; int l = 0, r = s[2].first-1; while (r < n-1) { if (actSum + v[r+1] - v[l] <= limit) { actSum += v[r+1] - v[l]; ++l; ++r; } else { break; } } if (r == n-1) { for (int i = 0; i < s[0].first; ++i) { ans[0].push_back(v[i]); } for (int i = 0; i < s[1].first; ++i) { ans[1].push_back(v[i + s[0].first]); } for (int i = 0; i < s[2].first; ++i) { ans[2].push_back(v[i + s[0].first + s[1].first]); } } else { for (int i = l; i <= r; ++i) { ans[2].push_back(v[i]); } for (int i = n-1; i > r+1; --i) { if (ans[1].size() < s[1].first) { ans[1].push_back(v[i]); } else { ans[0].push_back(v[i]); } } ans[0].push_back(v[r+1]); for (int i = l-1; i >= 0; --i) { if (ans[1].size() < s[1].first) { ans[1].push_back(v[i]); } else { ans[0].push_back(v[i]); } } } cout << "YES\n"; vector> realAns(3); for (int i = 0; i < 3; ++i) { realAns[s[i].second] = ans[i]; } for (int i = 0; i < 3; ++i) { cout << realAns[i][0]; for (int j = 1; j < realAns[i].size(); ++j) { cout << ' ' << realAns[i][j]; } cout << '\n'; } } }