#include <bits/stdc++.h>
const int ha = 998244353;
const int inv2 = 499122177;
const int inv6 = 166374059;
const int MAXN = 300 + 5;
std::vector<long long> Sx, Sy;
namespace DS {
int sm[MAXN << 2], tag[MAXN << 2];
inline void modify(int x, int l, int r, int L, int R, int d) {
  int len = Sy[r] - Sy[l - 1];
  if (l == L && r == R) {
    tag[x] += d;
    sm[x] = tag[x] ? len
                   : (l == r ? 0 : (sm[((x) << 1)] + sm[((x) << 1 | 1)]) % ha);
    return;
  }
  int mid = (l + r) >> 1;
  if (R <= mid)
    modify(((x) << 1), l, mid, L, R, d);
  else if (L > mid)
    modify(((x) << 1 | 1), mid + 1, r, L, R, d);
  else
    modify(((x) << 1), l, mid, L, mid, d),
        modify(((x) << 1 | 1), mid + 1, r, mid + 1, R, d);
  sm[x] =
      tag[x] ? len : (l == r ? 0 : (sm[((x) << 1)] + sm[((x) << 1 | 1)]) % ha);
}
}  // namespace DS
using DS::modify;
int x[MAXN], y[MAXN], n;
inline void add(int &x, int y) {
  x += y;
  if (x >= ha) x -= ha;
}
struct Node {
  int x1, y1, x2, y2;
  Node(int x1 = 0, int y1 = 0, int x2 = 0, int y2 = 0)
      : x1(x1), y1(y1), x2(x2), y2(y2) {}
} a[MAXN];
std::vector<std::pair<std::pair<int, int>, int> > G[MAXN];
inline int f(int k) {
  Sx.clear();
  Sy.clear();
  for (int i = 1; i <= n; ++i) {
    a[i] = Node(x[i] - k, y[i] - k, x[i] + k + 1, y[i] + k + 1);
    Sx.push_back(x[i] - k);
    Sy.push_back(y[i] - k);
    Sx.push_back(x[i] + k + 1);
    Sy.push_back(y[i] + k + 1);
  }
  std::sort(Sx.begin(), Sx.end());
  Sx.erase(std::unique(Sx.begin(), Sx.end()), Sx.end());
  std::sort(Sy.begin(), Sy.end());
  Sy.erase(std::unique(Sy.begin(), Sy.end()), Sy.end());
  int m = Sx.size(), M = Sy.size();
  for (int i = 0; i <= m + 1; ++i) G[i].clear();
  for (int i = 1; i <= n; ++i) {
    a[i].x1 = std::lower_bound(Sx.begin(), Sx.end(), a[i].x1) - Sx.begin() + 1;
    a[i].x2 = std::lower_bound(Sx.begin(), Sx.end(), a[i].x2) - Sx.begin() + 1;
    a[i].y1 = std::lower_bound(Sy.begin(), Sy.end(), a[i].y1) - Sy.begin() + 1;
    a[i].y2 = std::lower_bound(Sy.begin(), Sy.end(), a[i].y2) - Sy.begin() + 1;
    G[a[i].x1].push_back(std::make_pair(std::make_pair(a[i].y1, a[i].y2), 1));
    G[a[i].x2].push_back(std::make_pair(std::make_pair(a[i].y1, a[i].y2), -1));
  }
  Sy.push_back(Sy.back());
  memset(DS::sm, 0, sizeof(DS::sm));
  memset(DS::tag, 0, sizeof(DS::tag));
  int ans = 0;
  for (int i = 1; i <= m; ++i) {
    int t = (Sx[i - 1] - Sx[std::max(i - 2, 0)]) % ha;
    add(ans, 1ll * t * DS::sm[1] % ha);
    for (auto x : G[i])
      modify(1, 1, M, x.first.first, x.first.second - 1, x.second);
  }
  return ans;
}
inline int sm2(int n) {
  int res = 0;
  if (n < 0) return 0;
  if (n <= 5) {
    for (int i = 1; i <= n; ++i) add(res, i * i);
  } else {
    res = 1ll * n * (n + 1) % ha * (2ll * n + 1) % ha * inv6 % ha;
  }
  return res;
}
inline int sm(int n) {
  int res = 0;
  if (n < 0) return 0;
  if (n <= 5) {
    for (int i = 1; i <= n; ++i) add(res, i);
  } else {
    res = 1ll * n * (n + 1) % ha * inv2 % ha;
  }
  return res;
}
inline int sm(int l, int r) { return (sm(r) + ha - sm(l - 1)) % ha; }
inline int sm2(int l, int r) { return (sm2(r) + ha - sm2(l - 1)) % ha; }
int main() {
  int t;
  scanf("%d%d", &n, &t);
  for (int i = 1; i <= n; ++i) scanf("%d%d", x + i, y + i);
  std::vector<int> part;
  part.push_back(0);
  part.push_back(t);
  for (int i = 1; i <= n; ++i) {
    for (int j = i + 1; j <= n; ++j) {
      int d = std::max(std::abs(x[i] - x[j]), std::abs(y[i] - y[j]));
      d = (d + 1) / 2;
      if (d >= t) continue;
      part.push_back(d);
    }
  }
  std::sort(part.begin(), part.end());
  part.erase(std::unique(part.begin(), part.end()), part.end());
  int ans = 0;
  for (int i = 1; i <= (int)part.size() - 1; ++i) {
    int l = part[i - 1], r = part[i] - 1;
    if (r - l + 1 <= 3) {
      for (int k = l; k <= r; ++k) add(ans, f(k));
      continue;
    }
    int x[3], y[3];
    for (int j = 0; j <= 2; ++j) y[j] = f(x[j] = l + j);
    int a = 1ll * y[0] * inv2 % ha;
    add(a, ha - y[1]);
    add(a, 1ll * y[2] * inv2 % ha);
    int b = 1ll * y[0] * inv2 % ha * (x[1] + x[2]) % ha;
    add(b, ha - 1ll * y[1] * ((x[0] + x[2]) % ha) % ha);
    add(b, 1ll * y[2] * inv2 % ha * (x[1] + x[0]) % ha);
    b = ha - b;
    int c = 1ll * x[1] * x[2] % ha * y[0] % ha * inv2 % ha;
    add(c, ha - 1ll * x[0] * x[2] % ha * y[1] % ha);
    add(c, 1ll * x[0] * x[1] % ha * y[2] % ha * inv2 % ha);
    add(ans, 1ll * sm2(l, r) * a % ha);
    add(ans, 1ll * sm(l, r) * b % ha);
    add(ans, 1ll * (r - l + 1) * c % ha);
  }
  add(ans, ha - 1ll * t * f(t) % ha);
  ans = (ha - ans) % ha;
  printf("%d\n", ans);
  return 0;
}
