#include <bits/stdc++.h>
using namespace std;
namespace seg {
long long dat[2 * (1 << 22)], laz[2 * (1 << 22)];
void init() {
  for (int i = 0; i < 2 * (1 << 22); i++) {
    dat[i] = laz[i] = 0;
  }
}
long long eval(long long k) {
  if (k < (1 << 22)) {
    laz[k * 2] += laz[k];
    laz[k * 2 + 1] += laz[k];
  }
  dat[k] += laz[k];
  laz[k] = 0;
  return dat[k];
}
void upd(long long l, long long r, long long x) {
  if (l < 0) l = 0;
  l += (1 << 22), r += (1 << 22) + 1;
  for (long long a = l, b = r; a < b; a >>= 1, b >>= 1) {
    if (a & 1) {
      laz[a] += x;
      a++;
    }
    if (b & 1) {
      b--;
      laz[b] += x;
    }
  }
  for (long long a = l, b = r; a + b; a >>= 1, b >>= 1) {
    dat[a / 2] = max(eval(a), eval(a ^ 1));
    dat[b / 2] = max(eval(b), eval(b ^ 1));
  }
}
long long qry(long long l, long long r) {
  l += (1 << 22), r += (1 << 22) + 1;
  for (long long d = 20; d; d--) {
    eval(l >> d);
    eval(r >> d);
  }
  long long res = -1e17;
  for (long long a = l, b = r; a < b; a >>= 1, b >>= 1) {
    if (a & 1) res = max(res, eval(a++));
    ;
    if (b & 1) res = max(res, eval(--b));
    ;
  }
  return res;
};
};  // namespace seg
long long n, k;
vector<long long> v[(1 << 22)];
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  cin >> n >> k;
  k *= 2;
  for (int i = 0; i < n; i++) {
    long long a, b;
    cin >> a >> b;
    long long x = a + b + (1 << 21);
    long long y = a - b + (1 << 21);
    v[y].push_back(x);
  }
  long long ans = 0;
  seg::init();
  for (long long y = 0; y < (1 << 22); y++) {
    bool ch = 0;
    for (auto x : v[y]) {
      seg::upd(x - k, x, 1);
      ch = 1;
    }
    if (y - k - 1 >= 0)
      for (auto x : v[y - k - 1]) {
        seg::upd(x - k, x, -1);
        ch = 1;
      }
    if (ch) ans = max(ans, seg::qry(0, (1 << 22) - 2));
  }
  cout << ans << endl;
  return 0;
}
