#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, mod = 1e9 + 7;
int n, k, x, y, last[N], now[N];
vector<int> cor;
struct query {
  int ly, ry, x, add;
  query(int ly_, int ry_, int x_, int add_) {
    ly = ly_;
    ry = ry_;
    x = x_;
    add = add_;
  }
};
vector<query> Q;
bool cmp(query a, query b) { return a.x < b.x; }
long long ans[N];
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    cin >> x >> y;
    cor.push_back(y);
    cor.push_back(y - k);
    Q.push_back(query(y - k, y, x - k, 1));
    Q.push_back(query(y - k, y, x, -1));
  }
  sort(cor.begin(), cor.end());
  cor.resize(unique(cor.begin(), cor.end()) - cor.begin());
  sort(Q.begin(), Q.end(), cmp);
  for (int i = 0; i < 2 * n; ++i) {
    query q = Q[i];
    int poi = lower_bound(cor.begin(), cor.end(), q.ly) - cor.begin();
    while (poi < cor.size() && cor[poi] < q.ry) {
      ans[now[poi]] += (1LL * (cor[poi + 1] - cor[poi]) * (q.x - last[poi]));
      now[poi] += q.add;
      last[poi] = q.x;
      ++poi;
    }
  }
  for (int i = 1; i <= n; ++i) cout << ans[i] << ' ';
}
