#include <bits/stdc++.h>
using namespace std;
const int inf = (1 << 30) - 1;
const long long linf = (1ll << 62) - 1;
const int N = 1e6 + 100;
struct event {
  int x, t;
  int l, r;
  event(int m_x, int m_t, int m_l, int m_r) : x(m_x), t(m_t), l(m_l), r(m_r) {}
};
int n, k;
int x1[N], huy1[N], x2[N], y2[N], zx[N * 2], zy[N * 2], ccx = 0, ccy = 0;
void zip() {
  for (int i = 0; i < n; i++) {
    zx[ccx++] = x1[i];
    zx[ccx++] = x2[i] + 1;
    zy[ccy++] = huy1[i];
    zy[ccy++] = y2[i] + 1;
  }
  zx[ccx++] = -inf;
  zx[ccx++] = inf;
  sort(zx, zx + ccx), ccx = unique(zx, zx + ccx) - zx;
  sort(zy, zy + ccy), ccy = unique(zy, zy + ccy) - zy;
  for (int i = 0; i < n; i++) {
    x1[i] = lower_bound(zx, zx + ccx, x1[i]) - zx;
    x2[i] = lower_bound(zx, zx + ccx, x2[i] + 1) - zx - 1;
    huy1[i] = lower_bound(zy, zy + ccy, huy1[i]) - zy;
    y2[i] = lower_bound(zy, zy + ccy, y2[i] + 1) - zy - 1;
  }
}
int ans[N];
vector<pair<int, int>> event[N * 2];
int last[N * 2], curValue[N * 2];
long long answer[N * 2];
inline void update(int x, int delta, int i) {
  answer[curValue[x]] += 1ll * (zx[i] - zx[last[x]]) * (zy[x + 1] - zy[x]);
  curValue[x] += delta;
  last[x] = i;
}
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    x1[i] = x - k + 1;
    huy1[i] = y - k + 1;
    x2[i] = x;
    y2[i] = y;
  }
  zip();
  for (int i = 0; i < n; i++) {
    event[x1[i]].push_back(make_pair(i, 1));
    event[x2[i] + 1].push_back(make_pair(i, -1));
  }
  for (int i = 0; i < ccx; i++) {
    for (auto j : event[i]) {
      for (int z = huy1[j.first]; z <= y2[j.first]; z++) {
        update(z, j.second, i);
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    printf("%I64d\n", answer[i]);
  }
  return 0;
}
