#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chkmin(T &a, T b) {
  return a > b ? a = b, true : false;
}
template <class T>
inline bool chkmax(T &a, T b) {
  return a < b ? a = b, true : false;
}
const int NANA = -427394241, maxN = 1e5 + 5, maxK = 305;
int N, K;
struct Event {
  int x, y, tp;
  Event() {}
  Event(int x, int y, int tp) : x(x), y(y), tp(tp) {}
  void print() { fprintf(stderr, "x = %d y = %d tp = %d", x, y, tp); }
} ev[maxN << 1];
int Hash[maxN * maxK], totHash = 0;
void init() {
  cin >> N >> K;
  for (int i = (1), _end = (N); i <= _end; ++i) {
    int x, y;
    cin >> x >> y;
    ev[i * 2 - 1] = Event(x, y, +1);
    ev[i * 2] = Event(x + K, y, -1);
    for (int k = (0), _end = (K - 1); k <= _end; ++k) Hash[++totHash] = y + k;
  }
  sort(Hash + 1, Hash + totHash + 1);
  totHash = unique(Hash + 1, Hash + totHash + 1) - Hash - 1;
  N <<= 1;
  for (int i = (1), _end = (N); i <= _end; ++i) {
    ev[i].y = lower_bound(Hash + 1, Hash + totHash + 1, ev[i].y) - Hash;
  }
}
int *last, cnt[maxN * maxK];
long long ans[maxN];
bool cmp(const Event &x, const Event &y) {
  return x.x < y.x || (x.x == y.x && x.y < y.y);
}
void solve() {
  sort(ev + 1, ev + N + 1, cmp);
  last = Hash;
  for (int i = (0), _end = (totHash); i <= _end; ++i) last[i] = NANA;
  for (int i = (1), _end = (N); i <= _end; ++i) {
    int x = ev[i].x, y = ev[i].y, tp = ev[i].tp;
    for (int k = (0), _end = (K - 1); k <= _end; ++k) {
      if (last[y + k] != NANA) {
        ans[cnt[y + k]] += x - last[y + k];
      }
      cnt[y + k] += tp;
      last[y + k] = x;
    }
  }
  for (int i = (1), _end = (N >> 1); i <= _end; ++i) cout << ans[i] << ' ';
}
int main() {
  ios::sync_with_stdio(false);
  init();
  solve();
  return 0;
}
