#include <bits/stdc++.h>
using namespace std;
inline int qr() {
  int f = 0, fu = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') fu = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    f = (f << 3) + (f << 1) + c - 48;
    c = getchar();
  }
  return f * fu;
}
const int N = 2e5 + 10;
int a[N], n, k, T;
pair<int, int> b[N];
int main() {
  T = qr();
  while (T--) {
    n = qr(), k = qr();
    for (register int i = 1; i <= n; ++i) a[i] = qr();
    for (register int i = 1; i <= n; ++i) qr();
    sort(a + 1, a + n + 1);
    int m = 0;
    for (register int i = 1; i <= n; ++i) {
      b[++m] = {a[i], 0};
      int j = i;
      while (a[j] == a[i]) b[m].second++, j++;
      i = j - 1;
    }
    for (register int i = 1; i <= m; ++i) b[i].second += b[i - 1].second;
    if (k * 2 >= a[n] - a[1]) {
      printf("%d\n", n);
      continue;
    }
    vector<int> st(m + 1);
    int ans = 0;
    for (int i = 1, j = 1; i <= m; i++) {
      while (b[i].first - b[j].first > k) j++;
      st[i] = max(st[i - 1], b[i].second - b[j - 1].second);
      ans = max(ans, b[i].second - b[j - 1].second + st[j - 1]);
    }
    printf("%d\n", ans);
  }
  return 0;
}
