#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<pair<int, int> > cnt[100005];
vector<pair<int, int> > cntY[3004403];
struct Event {
  int type;
  int pos;
  int y;
  Event(int type, int pos, int y) : type(type), pos(pos), y(y) {}
};
vector<Event> events;
bool Comp(Event a, Event b) {
  return make_pair(a.pos, a.type) < make_pair(b.pos, b.type);
}
void updateCnt(int n, int val, int pos) {
  if (n <= 0) return;
  if (cnt[n].back().first < pos) {
    cnt[n].push_back(cnt[n].back());
    cnt[n].back().first = pos;
  }
  cnt[n].back().second += val;
}
int cntYGetValue(int pos) {
  int p = pos % 3004403;
  if (p < 0) p += 3004403;
  for (auto x : cntY[p])
    if (x.first == pos) return x.second;
  return 0;
}
void addToCntY(int pos, int val) {
  int p = pos % 3004403;
  if (p < 0) p += 3004403;
  for (int i = 0; i < (int)cntY[p].size(); ++i) {
    if (cntY[p][i].first == pos) {
      cntY[p][i].second += val;
      return;
    }
  }
  cntY[p].push_back(make_pair(pos, val));
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    events.push_back(Event(1, x - k + 1, y));
    events.push_back(Event(-1, x + 1, y));
  }
  sort(events.begin(), events.end(), Comp);
  for (int i = 1; i <= n; ++i) cnt[i].push_back(make_pair(-0x3f3f3f3f, 0));
  for (auto e : events) {
    int x = 0;
    for (int i = e.y - k + 1; i < e.y; ++i) x += cntYGetValue(i);
    for (int i = e.y; i <= e.y + k - 1; ++i) {
      x += cntYGetValue(i);
      updateCnt(x, -1, e.pos);
      updateCnt(x + e.type, 1, e.pos);
      x -= cntYGetValue(i - k + 1);
    }
    addToCntY(e.y, e.type);
  }
  for (int i = 1; i <= n; ++i) {
    long long ans = 0;
    for (int j = 0; j < (int)cnt[i].size() - 1; ++j)
      ans += 1LL * cnt[i][j].second * (cnt[i][j + 1].first - cnt[i][j].first);
    printf("%I64d ", ans);
  }
  printf("\n");
  return 0;
}
