#include <bits/stdc++.h>
using namespace std;
pair<int, int> ice[150000];
long long result[150000];
int main() {
  int N, K;
  scanf("%d%d", &N, &K);
  for (int i = 0; i < (N); ++i) scanf("%d%d", &ice[i].first, &ice[i].second);
  auto Ycomp = [](const pair<int, int>& a, const pair<int, int>& b) {
    return pair<int, int>(a.second, a.first) <
           pair<int, int>(b.second, b.first);
  };
  sort(ice, ice + N, Ycomp);
  vector<int> interestingYs;
  for (int i = 0; i < (N); ++i) {
    interestingYs.push_back(ice[i].second - (K - 1));
    interestingYs.push_back(ice[i].second + 1);
  }
  sort(interestingYs.begin(), interestingYs.end());
  interestingYs.erase(unique(interestingYs.begin(), interestingYs.end()),
                      interestingYs.end());
  int L = 0, R = 0;
  multiset<pair<int, int> > events;
  for (int yi = 0; yi < (interestingYs.size() - 1); ++yi) {
    int y = interestingYs[yi];
    int h = interestingYs[yi + 1] - y;
    while (L < N && ice[L].second < y) {
      events.erase(events.find({ice[L].first - (K - 1), 1}));
      events.erase(events.find({ice[L].first + 1, -1}));
      ++L;
    }
    while (R < N && ice[R].second < y + K) {
      events.insert({ice[R].first - (K - 1), 1});
      events.insert({ice[R].first + 1, -1});
      ++R;
    }
    int cnt = 0, x = 0;
    for (auto& event : events) {
      result[cnt] += h * (event.first - x);
      x = event.first;
      cnt += event.second;
    }
  }
  for (int i = (1); i < (N + 1); ++i) cout << result[i] << " ";
  cout << endl;
}
