#include <bits/stdc++.h>
using namespace std;
const int maxn = 500300;
int n, k;
pair<int, pair<int, pair<int, int> > > a[maxn];
vector<int> asl[maxn], asx[maxn], asr[maxn];
vector<int> X;
long long ans;
int id(int xx) { return lower_bound(X.begin(), X.end(), xx) - X.begin() + 1; }
int fen[maxn];
void add(int xx, int d) {
  for (; xx < maxn; xx += xx & -xx) fen[xx] += d;
}
void cal(int ll, int rr) {
  for (; rr; rr -= rr & -rr) ans += fen[rr];
  for (--ll; ll; ll -= ll & -ll) ans -= fen[ll];
}
void solve(int ls, int rs) {
  int gq = a[ls].first;
  vector<int> all;
  for (int i = ls; i < rs; i++) {
    asl[a[i].second.second.first].push_back(i);
    asx[a[i].second.first].push_back(i);
    asr[a[i].second.second.second].push_back(i);
    all.push_back(a[i].second.second.first);
    all.push_back(a[i].second.first);
    all.push_back(a[i].second.second.second);
  }
  sort(all.begin(), all.end());
  all.resize(unique(all.begin(), all.end()) - all.begin());
  for (int i : all) {
    for (int j : asx[i]) {
      if (a[j].first == gq) cal(a[j].second.second.first, i);
      add(i, +1);
    }
    for (int j : asr[i]) add(a[j].second.first, -1);
  }
  reverse(all.begin(), all.end());
  for (int i : all) {
    reverse(asx[i].begin(), asx[i].end());
    for (int j : asx[i]) {
      if (a[j].first == gq) cal(i, a[j].second.second.second);
      if (a[j].first != gq) add(i, +1);
    }
    for (int j : asl[i])
      if (a[j].first != gq) add(a[j].second.first, -1);
    asl[i].resize(0);
    asx[i].resize(0);
    asr[i].resize(0);
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++)
    cin >> a[i].second.first >> a[i].second.second.second >> a[i].first;
  sort(a, a + n);
  for (int i = 0; i < n; i++)
    X.push_back(a[i].second.first),
        X.push_back(a[i].second.first - a[i].second.second.second),
        X.push_back(a[i].second.first + a[i].second.second.second);
  sort(X.begin(), X.end());
  X.resize(unique(X.begin(), X.end()) - X.begin());
  for (int i = 0; i < n; i++) {
    a[i].second.second.first =
        id(a[i].second.first - a[i].second.second.second);
    a[i].second.second.second =
        id(a[i].second.first + a[i].second.second.second);
    a[i].second.first = id(a[i].second.first);
  }
  for (int lst, li = 0, ri = 1; li < n;) {
    for (; ri < n and a[ri].first <= a[li].first + k; ri++)
      ;
    solve(li, ri);
    int cur = a[li].first;
    for (; li < n and a[li].first == cur; li++)
      ;
  }
  cout << ans << endl;
  return 0;
}
