#include <bits/stdc++.h>
using namespace std;
int n, k;
struct Poi {
  int x, y, ff;
  bool operator<(const Poi &A) const {
    return x < A.x || (x == A.x && y < A.y);
  }
} pp[(200100)];
int row[(200100)], cntr;
int cnt[(200100)], pre[(200100)];
long long ans[(200100)];
inline void solve() {
  sort(pp + 1, pp + 1 + n * 2);
  for (int i = 1; i <= n * 2; ++i) {
    int y = lower_bound(row + 1, row + 1 + cntr, pp[i].y) - row;
    for (int j = y; row[j] < row[y] + k; ++j) {
      if (cnt[j] > 0)
        ans[cnt[j]] += (long long)(row[j + 1] - row[j]) * (pp[i].x - pre[j]);
      pre[j] = pp[i].x;
      cnt[j] += pp[i].ff;
    }
  }
  for (int i = 1; i <= n; ++i) cout << ans[i] << " ";
}
inline void In() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    int i1 = i * 2 - 1, i2 = i * 2;
    scanf("%d %d", &pp[i1].x, &pp[i1].y);
    pp[i1].ff = 1;
    row[i1] = pp[i1].y;
    row[i2] = row[i1] + k;
    pp[i2].y = pp[i1].y;
    pp[i2].ff = -1;
    pp[i2].x = pp[i1].x + k;
  }
  sort(row + 1, row + 1 + n * 2);
  cntr = 1;
  for (int i = 2; i <= n * 2; ++i)
    if (row[i] != row[cntr]) row[++cntr] = row[i];
}
int main() {
  In();
  solve();
  return 0;
}
