#include <bits/stdc++.h>
using namespace std;
const int N = 1000000;
const long long md = 1e9 + 7;
long long ans[N];
map<int, int> dp;
void add(int l, int r, int x) {
  dp[l] += x;
  dp[r + 1] -= x;
  if (dp[l] == 0) dp.erase(l);
  if (dp[r + 1] == 0) dp.erase(r + 1);
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  vector<pair<pair<int, int>, pair<int, int> > > e;
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    e.push_back(make_pair(make_pair(x, +1), make_pair(y - k + 1, y)));
    e.push_back(make_pair(make_pair(x + k, -1), make_pair(y - k + 1, y)));
  }
  sort(e.begin(), e.end());
  int i = 0;
  while (i < e.size()) {
    while ((i == 0 || e[i].first.first == e[i - 1].first.first) &&
           i < e.size()) {
      add(e[i].second.first, e[i].second.second, e[i].first.second);
      i++;
    }
    int j = 0;
    int lst = 0;
    for (auto it = dp.begin(); it != dp.end(); it++) {
      if (j != 0)
        ans[j] +=
            1LL * (it->first - lst) * (e[i].first.first - e[i - 1].first.first);
      j += it->second;
      lst = it->first;
    }
    add(e[i].second.first, e[i].second.second, e[i].first.second);
    i++;
  }
  for (int i = 1; i <= n; i++) {
    printf("%I64d ", ans[i]);
  }
  puts("");
  return 0;
}
