#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
void solve() {
int n;
ll k;
if (!(cin >> n >> k)) return;
vector<ll> a(n);
vector<ll> w(n);
for (int i = 0; i < n; ++i) cin >> a[i];
for (int i = 0; i < n; ++i) cin >> w[i];
vector<ll> prefix_w(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefix_w[i + 1] = prefix_w[i] + w[i];
}
ll S = 0;
int j = 0; // 指向滿足 a[i] - a[j] > k 的最大邊界
for (int i = 0; i < n; ++i) {
// 當距離大於 k 時,j 向右移
while (j < i && a[i] - a[j] > k) {
j++;
}
// 此時 0 到 j-1 的所有點都與 i 滿足距離 > k
if (j > 0) {
S += w[i] * prefix_w[j];
}
}
cout << S << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t;
if (!(cin >> t)) return 0;
while (t--) {
solve();
}
return 0;
}