#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAX_N = 1000 * 100 + 5;
struct Point {
  int x, y;
};
bool have_prev_cord[MAX_N * 2];
bool have_prev_line[MAX_N * 2];
int last_of_cord[MAX_N * 2];
int last_of_line[MAX_N * 2];
int at_cord[MAX_N * 2];
int at_line[MAX_N * 2];
vector<ll> solve(int n, int k, vector<Point> points) {
  vector<int> cord;
  for (auto p : points) {
    cord.push_back(p.x - (k - 1));
    cord.push_back(p.x);
  }
  sort(begin(cord), end(cord));
  cord.erase(unique(begin(cord), end(cord)), end(cord));
  struct Event {
    int l, r, ptr, type;
  };
  vector<Event> events;
  for (auto p : points) {
    int l = lower_bound(begin(cord), end(cord), p.x - (k - 1)) - begin(cord);
    int r = lower_bound(begin(cord), end(cord), p.x) - begin(cord);
    events.push_back({l, r, p.y - (k - 1), 1});
    events.push_back({l, r, p.y + 1, -1});
  }
  sort(begin(events), end(events),
       [](Event a, Event b) { return a.ptr < b.ptr; });
  memset(last_of_cord, 0, sizeof(last_of_cord));
  memset(last_of_line, 0, sizeof(last_of_line));
  memset(at_cord, 0, sizeof(at_cord));
  memset(at_line, 0, sizeof(at_line));
  memset(have_prev_cord, 0, sizeof(have_prev_cord));
  memset(have_prev_line, 0, sizeof(have_prev_cord));
  vector<ll> result(n + 1);
  for (auto event : events) {
    for (int j = event.l; j <= event.r; ++j) {
      if (!have_prev_cord[j])
        have_prev_cord[j] = true;
      else
        result[at_cord[j]] += event.ptr - last_of_cord[j];
      last_of_cord[j] = event.ptr;
      at_cord[j] += event.type;
      if (j == event.r) continue;
      if (!have_prev_line[j])
        have_prev_line[j] = true;
      else
        result[at_line[j]] +=
            1ll * (cord[j + 1] - cord[j] - 1) * (event.ptr - last_of_line[j]);
      last_of_line[j] = event.ptr;
      at_line[j] += event.type;
    }
  }
  return result;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, k;
  cin >> n >> k;
  auto points = vector<Point>(n);
  for (int i = 0; i < n; i++) {
    int x, y;
    cin >> x >> y;
    points[i] = {x, y};
  }
  auto answer = solve(n, k, points);
  for (int i = 1; i <= n; i++) cout << answer[i] << ' ';
  cout << endl;
}
