//GPT Pro #include using namespace std; using ll = long long; struct Solver { map mp; // value -> count ll sz = 0; // total count in mp ll ans = 0; // current maximum profit with 0 jewels void add_value(ll v, ll c) { if (c == 0) return; mp[v] += c; sz += c; } // Remove k smallest values and return their sum ll remove_smallest(ll k) { ll sum = 0; while (k > 0) { auto it = mp.begin(); ll v = it->first; ll c = it->second; ll take = min(k, c); sum += v * take; sz -= take; k -= take; if (take == c) mp.erase(it); else it->second -= take; } return sum; } // Remove k largest values void remove_largest(ll k) { while (k > 0) { auto it = prev(mp.end()); ll c = it->second; ll take = min(k, c); sz -= take; k -= take; if (take == c) mp.erase(it); else it->second -= take; } } ll solve_case(int N, ll K, const vector& A, const vector& B, const vector& C, const vector& D) { mp.clear(); sz = 0; ans = 0; for (int i = 0; i < N; ++i) { add_value(A[i], B[i]); add_value(C[i], D[i]); ll s = remove_smallest(D[i]); ans += C[i] * D[i] - s; if (sz > K) { remove_largest(sz - K); } } return ans; } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; Solver solver; while (T--) { int N; ll K; cin >> N >> K; vector A(N), B(N), C(N), D(N); for (int i = 0; i < N; ++i) cin >> A[i]; for (int i = 0; i < N; ++i) cin >> B[i]; for (int i = 0; i < N; ++i) cin >> C[i]; for (int i = 0; i < N; ++i) cin >> D[i]; cout << solver.solve_case(N, K, A, B, C, D) << ' '; } return 0; }