#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10, maxm = 3e7 + 10, oo = 2e9;
struct point {
  int x, y, t;
} P[maxn];
map<int, int> X;
long long ans[maxn];
int A[maxn], B[maxn], C[maxn], cnt[maxm], pos[maxm];
int n, m, i, j, x, y, z, tot, K;
bool cmp(point a, point b) { return a.y < b.y; }
int main() {
  scanf("%d%d", &n, &K);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &A[i], &B[i]);
    C[i] = A[i];
  }
  sort(C + 1, C + n + 1);
  C[n + 1] = oo;
  for (i = 1; i <= n; i++) {
    if (C[i] == C[i + 1]) continue;
    X[C[i]] = ++tot;
    for (j = C[i] + 1; j <= min(C[i + 1] - 1, C[i] + K - 1); j++) ++tot;
  }
  for (i = 1; i <= n; i++) {
    P[++m] = (point){X[A[i]], B[i], 1};
    P[++m] = (point){X[A[i]], B[i] + K, -1};
  }
  sort(P + 1, P + m + 1, cmp);
  for (i = 1; i <= m; i++)
    for (j = P[i].x; j < P[i].x + K; j++) {
      if (cnt[j]) ans[cnt[j]] += P[i].y - pos[j];
      pos[j] = P[i].y;
      cnt[j] += P[i].t;
    }
  for (i = 1; i <= n; i++) printf("%lld%c", ans[i], i < n ? ' ' : '\n');
  return 0;
}
