#include <bits/stdc++.h>
using namespace std;
struct que {
  int l, r, y, val;
  bool operator<(const que &v) const { return y < v.y; }
};
int n, k, x[100010], y[100010], cnt[100010 * 2], pre[100010 * 2];
long long ans[100010];
vector<que> q;
vector<int> h;
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int i = 1; i <= 2 * n; i++) pre[i] = -0x3f3f3f3f;
  h.push_back(-0x3f3f3f3f);
  for (int i = 1; i <= n; i++) {
    h.push_back(x[i]);
    h.push_back(x[i] + k);
  }
  sort(h.begin(), h.end());
  h.resize(unique(h.begin(), h.end()) - h.begin());
  for (int i = 1, l, r; i <= n; i++) {
    l = upper_bound(h.begin(), h.end(), x[i]) - h.begin();
    r = lower_bound(h.begin(), h.end(), x[i] + k) - h.begin();
    q.push_back({l, r, y[i], 1});
    q.push_back({l, r, y[i] + k, -1});
  }
  sort(q.begin(), q.end());
  for (auto i : q)
    for (int j = i.l; j <= i.r; j++) {
      ans[cnt[j]] += 1ll * (h[j] - h[j - 1]) * (i.y - pre[j]);
      cnt[j] += i.val;
      pre[j] = i.y;
    }
  for (int i = 1; i <= n; i++) printf("%lld ", ans[i]);
  return 0;
}
