#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int mod = 1e9 + 7;
void add(int &a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
int sum(int a, int b) {
  add(a, b);
  return a;
}
int mult(int a, int b) { return (1ll * a * b) % mod; }
int n, k;
long long ans[N];
map<int, vector<pair<int, int> > > lazy;
multiset<pair<int, int> > all;
int main() {
  clock_t start = clock();
  scanf("%d%d", &n, &k);
  for (int i = 1, x, y; i <= n; i++) {
    scanf("%d%d", &x, &y);
    lazy[y - k + 1].push_back(make_pair(x, 1));
    lazy[y + 1].push_back(make_pair(x, -1));
  }
  for (auto cur = lazy.begin();;) {
    auto nxt = cur;
    nxt++;
    if (nxt == lazy.end()) break;
    int height = nxt->first - cur->first;
    for (auto i : cur->second) {
      if (i.second == 1) {
        all.insert(make_pair(i.first - k + 1, 1));
        all.insert(make_pair(i.first + 1, -1));
      } else {
        all.erase(all.find(make_pair(i.first - k + 1, 1)));
        all.erase(all.find(make_pair(i.first + 1, -1)));
      }
    }
    if (all.size() == 0) {
      cur = nxt;
      continue;
    }
    int cnt = 0;
    vector<pair<int, int> > nw;
    for (auto c : all) nw.push_back(make_pair(c.first, c.second));
    for (int i = 0; i < nw.size();) {
      int j = i;
      while (j < nw.size() && nw[i].first == nw[j].first) {
        cnt += nw[j].second;
        j++;
      }
      if (j == nw.size()) break;
      int width = nw[j].first - nw[i].first;
      ans[cnt] += 1ll * height * width;
      i = j;
    }
    cur = nxt;
  }
  for (int i = 1; i <= n; i++) cout << ans[i] << " ";
  double duration = ((double)clock() - start) / (double)CLOCKS_PER_SEC;
  return 0;
}
