#include #include using namespace std; typedef long long int ll; int main() { ll t; cin >> t; while (t--) { ll n, xA, xB, xC; ll origA, origB, origC; cin >> n >> xA >> xB >> xC; origA = xA, origB = xB, origC = xC; vector a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } sort(a.begin(), a.end()); ll sum = 0; for (int i = 0; i < n; ++i) { sum += a[i]; } ll temp = xA + xB + xC; ll tA = min(xA, min(xB, xC)); xC = max(xA, max(xB, xC)); xA = tA; xB = temp - xA - xC; ll curSum = 0; for (int i = 0; i < xA; ++i) { curSum += a[i]; } ll cur = xA - 1; ll top = n - 1; while (cur >= 0 && curSum + a[top] - a[cur] < (sum + 1) / 2) { curSum = curSum + a[top] - a[cur]; top--; cur--; } if (top == n - 1) { cout << "NO" << endl; continue; } vector aOut, bOut, cOut; for (int i = 0; i <= cur; ++i) { aOut.emplace_back(a[i]); } for (int i = top + 1; i < n; ++i) { aOut.emplace_back(a[i]); } if (cur == -1) { ll tempSum = 0; ll tempTop = top; ll tempCur = xB - 1; for (int i = 0; i < xB; ++i) { tempSum += a[i]; } while (tempCur >= 0 && tempSum + a[tempTop] - a[tempCur] < (sum + 1) / 2) { tempSum = tempSum + a[tempTop] - a[tempCur]; tempTop--; tempCur--; } ll bSum = 0, cSum = 0; for (int i = 0; i <= tempCur; ++i) { bOut.emplace_back(a[i]); bSum += a[i]; } for (int i = tempTop + 1; i <= top; ++i) { bOut.emplace_back(a[i]); bSum += a[i]; } for (int i = tempCur + 1; i <= tempTop; ++i) { cSum += a[i]; cOut.emplace_back(a[i]); } if (bSum < curSum + cSum && cSum < curSum + bSum) { cout << "YES" << endl; if (aOut.size() == origA) { for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; if(bOut.size() == origB){ for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; } } else if (bOut.size() == origA) { for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; if(aOut.size() == origB){ for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; } } else { for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; if(aOut.size() == origB){ for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; } } } else cout << "NO" << endl; continue; } ll bSum = a[top], cSum = 0; bOut.emplace_back(a[top]); for (int i = top - 1; i >= top - xC; --i) { cSum += a[i]; cOut.emplace_back(a[i]); } for (int i = cur + 1; i < top - xC; ++i) { bSum += a[i]; bOut.emplace_back(a[i]); } if (bSum < curSum + cSum && cSum < curSum + bSum) { cout << "YES" << endl; if (aOut.size() == origA) { for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; if(bOut.size() == origB){ for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; } } else if (bOut.size() == origA) { for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; if(aOut.size() == origB){ for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; } } else { for (int i = 0; i < cOut.size(); ++i) { cout << cOut[i] << " "; } cout << endl; if(aOut.size() == origB){ for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; }else{ for (int i = 0; i < bOut.size(); ++i) { cout << bOut[i] << " "; } cout << endl; for (int i = 0; i < aOut.size(); ++i) { cout << aOut[i] << " "; } cout << endl; } } } else cout << "NO" << endl; } return 0; }