#include <bits/stdc++.h>
using namespace std;
template <typename T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
struct event {
  int x, y1, y2, d;
  bool operator<(const event &e) const { return x < e.x; }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  vector<long long> x(n), y(n), vx, vy;
  for (int i = (0); i < (n); i++) {
    cin >> x[i] >> y[i];
    vx.push_back(x[i]);
    vx.push_back(x[i] - k);
    vy.push_back(y[i]);
    vy.push_back(y[i] - k);
  }
  sort((vx).begin(), (vx).end());
  sort((vy).begin(), (vy).end());
  vx.erase(unique((vx).begin(), (vx).end()), vx.end());
  vy.erase(unique((vy).begin(), (vy).end()), vy.end());
  auto get = [&](const long long x, const vector<long long> &v) {
    return lower_bound((v).begin(), (v).end(), x) - v.begin();
  };
  vector<event> e;
  for (int i = (0); i < (n); i++) {
    int x1 = get(x[i] - k, vx);
    int y1 = get(y[i] - k, vy);
    int x2 = get(x[i], vx);
    int y2 = get(y[i], vy);
    e.push_back({x1, y1, y2, +1});
    e.push_back({x2, y1, y2, -1});
  }
  sort((e).begin(), (e).end());
  vector<int> sum(((int)(vy).size()), 0), px(((int)(vy).size()), -1);
  vector<vector<pair<int, int>>> ve(((int)(vy).size()));
  vector<long long> ans(n + 1, 0);
  for (auto &ev : e) {
    for (int i = (ev.y1); i < (ev.y2); i++) {
      if (sum[i] > 0)
        ans[sum[i]] += (vx[ev.x] - vx[px[i]]) * (vy[i + 1] - vy[i]);
      sum[i] += ev.d;
      px[i] = ev.x;
    }
  }
  for (int i = (1); i < (n + 1); i++) {
    cout << ans[i] << ' ';
  }
  cout << '\n';
}
