#include <bits/stdc++.h>
using namespace std;
const int MAXSIZE = 30000020;
int bufpos;
char buf[MAXSIZE];
void init() {
  buf[fread(buf, 1, MAXSIZE, stdin)] = '\0';
  bufpos = 0;
}
int readint() {
  bool isneg;
  int val = 0;
  for (; !isdigit(buf[bufpos]) && buf[bufpos] != '-'; bufpos++)
    ;
  bufpos += (isneg = buf[bufpos] == '-');
  for (; isdigit(buf[bufpos]); bufpos++) val = val * 10 + buf[bufpos] - '0';
  return isneg ? -val : val;
}
char readchar() {
  for (; isspace(buf[bufpos]); bufpos++)
    ;
  return buf[bufpos++];
}
int readstr(char* s) {
  int cur = 0;
  for (; isspace(buf[bufpos]); bufpos++)
    ;
  for (; !isspace(buf[bufpos]); bufpos++) s[cur++] = buf[bufpos];
  s[cur] = '\0';
  return cur;
}
int lst[200002], cnt[200002], nums[200002];
long long ans[200002];
struct event {
  int x, y, sgn;
  bool operator<(const event& rhs) const { return x < rhs.x; }
} a[200002];
int main() {
  init();
  int n = readint(), k = readint(), cur = 0, qwq = 0;
  for (int i = 1; i <= n; i++) {
    int x = readint(), y = readint();
    nums[++qwq] = y;
    nums[++qwq] = y + k;
    a[++cur] = (event){x, y, 1};
    a[++cur] = (event){x + k, y, -1};
  }
  sort(a + 1, a + cur + 1);
  sort(nums + 1, nums + qwq + 1);
  qwq = unique(nums + 1, nums + qwq + 1) - nums - 1;
  for (int i = 1; i <= cur; i++) {
    int st = lower_bound(nums + 1, nums + qwq + 1, a[i].y) - nums,
        en = lower_bound(nums + 1, nums + qwq + 1, a[i].y + k) - nums;
    for (int j = st; j < en; j++) {
      ans[cnt[j]] += 1LL * (nums[j + 1] - nums[j]) * (a[i].x - lst[j]);
      cnt[j] += a[i].sgn;
      lst[j] = a[i].x;
    }
  }
  for (int i = 1; i <= n; i++) printf("%lld ", ans[i]);
}
