#include #include #include #include using namespace std; void solve() { int N; long long 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]; map mp; long long sz = 0; long long ans = 0; for (int i = N - 1; i >= 0; --i) { if (D[i] > 0) { mp[C[i]] += D[i]; sz += D[i]; } long long b_rem = B[i]; long long matched = 0; while (b_rem > 0 && !mp.empty()) { auto it = mp.end(); --it; long long val = it->first; long long cnt = it->second; if (val <= A[i]) { break; } long long m = min(b_rem, cnt); ans += m * (val - A[i]); b_rem -= m; matched += m; sz -= m; it->second -= m; if (it->second == 0) { mp.erase(it); } } if (matched > 0) { mp[A[i]] += matched; sz += matched; } while (sz > K && !mp.empty()) { auto it = mp.begin(); long long exc = sz - K; long long m = min(exc, it->second); sz -= m; it->second -= m; if (it->second == 0) { mp.erase(it); } } } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int T; if (cin >> T) { while (T--) { solve(); } } return 0; }