#include <bits/stdc++.h>
static const int MAXN = 100008;
static const int MAXK = 300;
struct event {
  int time;
  int l, r;
  signed short inc;
  event() {}
  event(int time, int l, int r, signed short inc)
      : time(time), l(l), r(r), inc(inc) {}
};
inline bool operator<(const event &lhs, const event &rhs) {
  return lhs.time < rhs.time;
}
int n, k;
std::pair<int, int> p[MAXN];
event ev[MAXN * 2];
long long ans[MAXN] = {0};
int omoshiroi[MAXN];
int row[MAXN * MAXK];
static const int UPPER_BOUND = 1e9 + 20;
inline void process_event(const event &e) {
  for (int i = e.l; i <= e.r; ++i) {
    ans[row[i]] -= (UPPER_BOUND - e.time);
    row[i] += e.inc;
    ans[row[i]] += (UPPER_BOUND - e.time);
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &p[i].first, &p[i].second);
  }
  std::sort(p, p + n);
  int mapped_coord = -k, real_coord = -UPPER_BOUND;
  for (int i = 0; i < n; ++i) {
    if (p[i].first >= real_coord + k) {
      mapped_coord += k;
    } else {
      mapped_coord += (p[i].first - real_coord);
    }
    real_coord = p[i].first;
    ev[i + i] = event(p[i].second, mapped_coord, mapped_coord + k - 1, +1);
    ev[i + i + 1] =
        event(p[i].second + k, mapped_coord, mapped_coord + k - 1, -1);
  }
  std::sort(ev, ev + n + n);
  for (int i = 0; i < n + n; ++i) process_event(ev[i]);
  for (int i = 1; i <= n; ++i) printf("%I64d%c", ans[i], i == n ? '\n' : ' ');
  return 0;
}
