#include using namespace std; using pii = pair; using ll = long long; const int N = 2000010, MOD = 998244353, INF = 0x3f3f3f3f; int n, m, w[N]; ll k; int a[N], b[N], c[N], d[N]; void solve() { scanf("%d%lld", &n, &k); for (int i = 1; i < n + 1; i++) scanf("%d", a + i); for (int i = 1; i < n + 1; i++) scanf("%d", b + i); for (int i = 1; i < n + 1; i++) scanf("%d", c + i); for (int i = 1; i < n + 1; i++) scanf("%d", d + i); multiset st; ll res = 0, sum = 0; for (int i = 1; i < n + 1; i++) { int p = d[i]; st.insert({a[i], b[i]}), sum += b[i]; while (d[i]) { if (st.size() && st.begin()->first < c[i]) { auto u = *st.begin(); st.erase(st.begin()); int t = min(d[i], u.second); d[i] -= t, u.second -= t, sum -= t; if (u.second) st.insert(u); res += (ll)(c[i] - u.first) * t; } else break; } if (p != d[i]) st.insert({c[i], p - d[i]}), sum += p - d[i]; while (sum > k) { auto u = *st.rbegin(); st.erase(st.find(u)); int g = min(sum - k, (ll)u.second); u.second -= g, sum -= g; if (u.second) st.insert(u); } } printf("%lld\n", res); } int main() { int T = 1; cin >> T; while (T--) solve(); return 0; }