#include <bits/stdc++.h>
using namespace std;
int n, k;
map<int, pair<int, int> > M;
struct edge {
  int d, x, yl, yr;
} E[300000];
int tot;
int comp(edge a, edge b) { return a.x < b.x; }
long long ans[300000];
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; ++i) {
    int x, y;
    cin >> x >> y;
    E[++tot] = (edge){1, x - k + 1, y, y + k};
    E[++tot] = (edge){-1, x + 1, y, y + k};
  }
  sort(E + 1, E + tot + 1, comp);
  M[-1000000600] = make_pair(-1000000600, 0);
  for (int i = 1; i <= tot; ++i) {
    map<int, pair<int, int> >::iterator it, itp;
    if (!M.count(E[i].yl))
      it = M.lower_bound(E[i].yl), it--, M[E[i].yl] = it->second;
    if (!M.count(E[i].yr))
      it = M.lower_bound(E[i].yr), it--, M[E[i].yr] = it->second;
    for (it = M.lower_bound(E[i].yl), itp = it, ++itp; (it->first) != E[i].yr;
         ++it, ++itp) {
      if ((it->second).second)
        ans[(it->second).second] +=
            1ll * ((itp->first) - (it->first)) * (E[i].x - (it->second).first);
      it->second = make_pair(E[i].x, (it->second).second + E[i].d);
    }
  }
  for (int i = 1; i <= n; ++i) cout << ans[i] << "\n";
}
