#include <bits/stdc++.h>
using namespace std;
char ch, B[1 << 20], *S = B, *T = B;
long long aa, bb;
long long rd() {
  while (ch = (S == T && (T = (S = B) + fread(B, 1, 1 << 20, stdin), S == T)
                   ? 0
                   : *S++),
         !(ch >= '0' && ch <= '9') && ch != '-')
    ;
  ch == '-' ? aa = bb = 0 : (aa = ch - '0', bb = 1);
  while (ch = (S == T && (T = (S = B) + fread(B, 1, 1 << 20, stdin), S == T)
                   ? 0
                   : *S++),
         (ch >= '0' && ch <= '9'))
    aa = aa * 10 + ch - '0';
  return bb ? aa : -aa;
}
const long long MAXN = 1e5 + 10;
long long n, k, ans, b[MAXN], tr[MAXN];
struct Node {
  long long pos, l, r, q, len;
} a[MAXN];
bool cmp1(Node a, Node b) { return a.len > b.len; }
bool cmp2(Node a, Node b) { return a.q < b.q; }
inline void add(long long x, long long c) {
  while (x <= n) {
    tr[x] += c;
    x += (x & (-x));
  }
}
long long sum(long long x) {
  long long ret = 0;
  while (x) {
    ret += tr[x];
    x -= (x & (-x));
  }
  return ret;
}
long long query(long long l, long long r) { return sum(r) - sum(l - 1); }
inline void cdq(long long l, long long r) {
  if (l == r) return;
  long long mid = (l + r) >> 1;
  cdq(l, mid);
  cdq(mid + 1, r);
  long long L = l, R = l - 1;
  for (register long long i = mid + 1; i <= r; ++i) {
    while (L <= mid && a[i].q - a[L].q > k) {
      add(a[L].pos, -1);
      ++L;
    }
    while (R < mid && a[R + 1].q - a[i].q <= k) {
      ++R;
      add(a[R].pos, 1);
    }
    ans += query(a[i].l, a[i].r);
  }
  for (register long long i = L; i <= R; ++i) add(a[i].pos, -1);
  sort(a + l, a + r + 1, cmp2);
}
inline void work() {
  n = rd();
  k = rd();
  for (register long long i = 1; i <= n; ++i) {
    a[i].pos = rd();
    a[i].len = rd();
    a[i].q = rd();
    b[i] = a[i].pos;
  }
  sort(b + 1, b + n + 1);
  long long cnt = unique(b + 1, b + n + 1) - b - 1;
  for (register long long i = 1; i <= n; ++i) {
    a[i].l = lower_bound(b + 1, b + cnt + 1, a[i].pos - a[i].len) - b;
    a[i].r = upper_bound(b + 1, b + cnt + 1, a[i].pos + a[i].len) - b - 1;
    a[i].pos = lower_bound(b + 1, b + cnt + 1, a[i].pos) - b;
  }
  sort(a + 1, a + n + 1, cmp1);
  cdq(1, n);
  printf("%lld\n", ans);
}
signed main() {
  work();
  return 0;
}
