#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 9;
int x[N], t, n, k;
char buf[1 << 21], *p1 = buf, *p2 = buf;
inline int getc() {
  return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)
             ? EOF
             : *p1++;
}
inline int read() {
  int ret = 0, f = 0;
  char ch = getc();
  while (!isdigit(ch)) {
    if (ch == '-') f = 1;
    ch = getc();
  }
  while (isdigit(ch)) {
    ret = ret * 10 + ch - 48;
    ch = getc();
  }
  return f ? -ret : ret;
}
char Buf[1 << 21], out[20];
int P, Size = -1;
inline void flush() {
  fwrite(Buf, 1, Size + 1, stdout);
  Size = -1;
}
inline void write(int x, char ch) {
  if (Size > 1 << 20) flush();
  if (x < 0) Buf[++Size] = 45, x = -x;
  do {
    out[++P] = x % 10 + 48;
  } while (x /= 10);
  do {
    Buf[++Size] = out[P];
  } while (--P);
  Buf[++Size] = ch;
}
inline int max(int a, int b) { return a > b ? a : b; }
int main() {
  t = read();
  while (t--) {
    n = read(), k = read();
    for (register int i = 0; i < n; i++) *(x + i) = read();
    for (register int i = 0; i < n; i++) read();
    sort(x, x + n);
    int maxi = 0, opt = 0, fans = 0;
    for (register int i = 0; i < n; i++) {
      int curr = upper_bound(x + i, x + n, *(x + i) + k) - x - i;
      if (i) opt = x + i - lower_bound(x, x + i - 1, *(x + i - 1) - k);
      maxi = max(maxi, opt);
      curr += maxi;
      fans = max(fans, curr);
    }
    write(fans, '\n');
  }
  flush();
  return 0;
}
