#include <bits/stdc++.h>
using namespace std;
const long long p = 998244353;
long long n, t;
struct nod {
  long long x, y;
  nod() { x = y = 0; }
  nod(long long a1, long long a2) { x = a1, y = a2; }
} a[55];
vector<long long> tim;
inline long long dis(nod i, nod j) {
  return max(abs(i.x - j.x), abs(i.y - j.y));
}
void init() {
  cin >> n >> t;
  tim.push_back(0);
  tim.push_back(t);
  for (long long i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;
  for (long long i = 1; i <= n; i++) {
    for (long long j = i + 1; j <= n; j++) {
      nod res((a[i].x + a[j].x) / 2, (a[i].y + a[j].y) / 2);
      tim.push_back(max(dis(res, a[i]), dis(res, a[j])));
    }
  }
  sort(tim.begin(), tim.end());
}
long long inv6 = (998244353 + 1) / 6, inv2 = 998244354 / 2;
long long s2(long long x) {
  if (x < 0) return 0;
  return x * (x + 1) % p * (x * 2 + 1) % p * inv6 % p;
}
long long s1(long long x) {
  if (x < 0) return 0;
  return x * (x + 1) % p * inv2 % p;
}
long long s0(long long x) {
  if (x < 0) return 0;
  return x;
}
struct point {
  long long x, l, r, val;
  point() { x = l = r = val = 0; }
  point(long long a1, long long a2, long long a3, long long a4) {
    x = a1, l = a2, r = a3, val = a4;
  }
} e[205];
bool cmp(point i, point j) {
  return (i.x == j.x) ? (i.val < j.val) : (i.x < j.x);
}
long long tot, lsh[205], num, c[205];
long long G(long long k) {
  tot = num = 0;
  for (long long i = 1; i <= n; i++) {
    ++tot;
    e[tot] = (point){a[i].x - k, a[i].y - k, a[i].y + k + 1, 1};
    ++tot;
    e[tot] = (point){a[i].x + k + 1, a[i].y - k, a[i].y + k + 1, -1};
    lsh[++num] = a[i].y - k;
    lsh[++num] = a[i].y + k + 1;
  }
  sort(lsh + 1, lsh + num + 1);
  num = unique(lsh + 1, lsh + num + 1) - lsh - 1;
  for (long long i = 1; i <= tot; i++) {
    e[i].l = lower_bound(lsh + 1, lsh + num + 1, e[i].l) - lsh;
    e[i].r = lower_bound(lsh + 1, lsh + num + 1, e[i].r) - lsh;
  }
  sort(e + 1, e + tot + 1, cmp);
  long long ans = 0;
  for (long long i = 1; i <= tot; i++) {
    for (long long j = e[i].l; j < e[i].r; j++) c[j] += e[i].val;
    if (e[i].x != e[i + 1].x || i == tot) {
      long long res = 0;
      for (long long j = 1; j <= num; j++)
        if (c[j]) res = (res + lsh[j + 1] - lsh[j]) % p;
      ans += (e[i + 1].x - e[i].x) * res % p;
      ans %= p;
    }
  }
  return (ans + p) % p;
}
long long ksm(long long x, long long t, long long y = 1) {
  x = (x + p) % p;
  while (t) {
    if (t & 1) y = y * x % p;
    x = x * x % p;
    t >>= 1;
  }
  return y;
}
void solve(long long a0, long long a1, long long a2, long long T, long long &x,
           long long &y, long long &z) {
  long long pp[3][4] = {{T * T % p, T, 1, a0},
                        {(T + 1) * (T + 1) % p, T + 1, 1, a1},
                        {(T + 2) * (T + 2) % p, T + 2, 1, a2}};
  for (long long i = 0; i < 3; i++) {
    for (long long j = i; j < 3; j++)
      if (pp[j][i] != 0) {
        swap(pp[i], pp[j]);
        break;
      }
    long long inv = ksm(pp[i][i], p - 2);
    for (long long j = i; j < 4; j++) pp[i][j] = pp[i][j] * inv % p;
    for (long long j = i + 1; j < 3; j++) {
      long long res = pp[j][i];
      for (long long k = i; k < 4; k++)
        pp[j][k] = (pp[j][k] - res * pp[i][k] % p + p) % p;
    }
  }
  for (long long i = 2; i >= 0; i--) {
    for (long long j = i - 1; j >= 0; j--)
      pp[j][3] = (pp[j][3] - pp[i][3] * pp[j][i] % p + p) % p;
  }
  x = pp[0][3], y = pp[1][3], z = pp[2][3];
}
signed main() {
  ios::sync_with_stdio(0);
  init();
  long long ans = 0;
  for (long long i = 0, x, y, z; i < tim.size() - 1; i++) {
    if (tim[i] == t) break;
    long long delta = tim[i + 1] - tim[i];
    if (delta <= 2) {
      for (long long j = tim[i]; j < tim[i + 1]; j++) {
        ans = (ans + G(j)) % p;
      }
    } else {
      long long a0 = G(tim[i]), a1 = G(tim[i] + 1), a2 = G(tim[i] + 2);
      solve(a0, a1, a2, tim[i], x, y, z);
      ans = (ans + x * s2(tim[i + 1] - 1) - x * s2(tim[i] - 1)) % p;
      ans = (ans + y * s1(tim[i + 1] - 1) - y * s1(tim[i] - 1)) % p;
      ans = (ans + z * (tim[i + 1] - 1) - z * (tim[i] - 1)) % p;
    }
  }
  ans = (t * G(t) - ans) % p;
  cout << (ans + p) % p << '\n';
}
