#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
struct xxx {
  int x, y;
} a[N];
vector<int> c[N * 2];
int n, m, k;
int b[N * 2], d[N * 2];
long long ans[N];
bool com(xxx a, xxx b) { return a.y < b.y; }
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &a[i].x, &a[i].y);
    b[i * 2 - 1] = a[i].x;
    b[i * 2] = a[i].x + k;
  }
  sort(b + 1, b + n * 2 + 1);
  for (int i = 1; i <= n * 2; i++)
    if (b[i] != b[i + 1]) b[++m] = b[i];
  sort(a + 1, a + n + 1, com);
  for (int i = 1; i <= n; i++) {
    int l = lower_bound(b + 1, b + m + 1, a[i].x) - b;
    int r = lower_bound(b + 1, b + m + 1, a[i].x + k) - b;
    for (int j = l; j < r; j++) c[j].push_back(a[i].y);
  }
  for (int i = 1; i < m; i++) {
    int p = 1, l = 0, pre;
    for (vector<int>::iterator p = c[i].begin(); p != c[i].end(); p++)
      d[++l] = *p;
    for (int j = 2; j <= l + 1; j++) {
      pre = d[j - 1];
      while (p < j && (j == l + 1 || d[p] + k <= d[j])) {
        ans[j - p] += (long long)(b[i + 1] - b[i]) * (d[p] + k - pre);
        pre = d[p++] + k;
      }
      ans[j - p] += (long long)(b[i + 1] - b[i]) * (d[j] - pre);
    }
  }
  for (int i = 1; i <= n; i++) printf("%I64d ", ans[i]);
  return 0;
}
