#include <bits/stdc++.h>
using namespace std;
const int e = 1e5 + 100;
int n, m, K;
int p[e], tmp[e];
struct nod {
  long long x, len, l, r, q;
} a[e];
bool cmp1(nod t1, nod t2) { return t1.len > t2.len; }
bool cmp2(nod t1, nod t2) { return t1.q < t2.q; }
long long ans = 0;
long long tr[e];
inline int lowbit(int x) { return x & (-x); }
void add(int pl, long long det) {
  for (int i = pl; i <= n; i += lowbit(i)) {
    tr[i] += det;
  }
}
long long sum(int pl) {
  long long ret = 0;
  for (int i = pl; i; i -= lowbit(i)) ret += tr[i];
  return ret;
}
long long akse(int l, int r) { return sum(r) - sum(l - 1); }
void sol(int l, int r) {
  if (l == r) return;
  int mid = (l + r) / 2;
  sol(l, mid);
  sol(mid + 1, r);
  int L = l, R = l - 1;
  for (int i = mid + 1; i <= r; i++) {
    while (L <= mid and a[i].q - a[L].q > K) add(a[L].x, -1), L++;
    while (R < mid and a[R + 1].q - a[i].q <= K) R++, add(a[R].x, 1);
    ans += akse(a[i].l, a[i].r);
  }
  for (int i = L; i <= R; i++) add(a[i].x, -1);
  sort(a + l, a + r + 1, cmp2);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> K;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].x >> a[i].len >> a[i].q;
    p[i] = a[i].x;
  }
  sort(p + 1, p + 1 + n);
  int c = 0;
  p[0] = -999;
  for (int i = 1; i <= n; i++) {
    if (p[i] != p[i - 1]) {
      c++;
      tmp[c] = p[i];
    }
  }
  for (int i = 1; i <= n; i++) {
    a[i].l = lower_bound(tmp + 1, tmp + c + 1, a[i].x - a[i].len) - tmp;
    a[i].r = upper_bound(tmp + 1, tmp + c + 1, a[i].x + a[i].len) - tmp - 1;
    a[i].x = lower_bound(tmp + 1, tmp + c + 1, a[i].x) - tmp;
  }
  sort(a + 1, a + n + 1, cmp1);
  sol(1, n);
  cout << ans;
  return 0;
}
