#include #include using namespace std; using namespace atcoder; using ll = long long; using vi = vector; using vvi = vector; using vl = vector; using vvl = vector; using vs = vector; using vp = vector>; #define rep(i, s, n) for (int i = (s); i < (int)(n); ++i) #define repr(i, s, n) for (int i = (s); i >= (int)(n); --i) #define sz(x) ((int)(x).size()) constexpr int INFI = 1001001001; constexpr ll INFL = (1LL << 60); int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, d; cin >> n >> d; ll ans = 0; unordered_map mp; map cnt; vi b; vi aa(n); rep(i, 0, n){ cin >> aa[i]; cnt[aa[i]] ++; if(cnt[aa[i]] == 1) b.push_back (aa[i]); } // cerr <<"cnt:\n"; // for (auto x: cnt) {cerr <<"("<< x.first <<","<< x.second <<")";} cerr << "\n" ; rep(i, 0, sz(b)){ int a = b[i]; mp[a].push_back (a); if(a >= d){ mp[a - d].push_back (a); } if(a >= d + d){ int add = a - d - d; mp[add].push_back (a); if(sz(mp[add]) == 3){ ans += cnt[a] * cnt[a - d] * cnt[add]; mp[add][0] = mp[add][1]; mp[add][1] = mp[add][2]; mp[add].pop_back(); // cerr <<"a: "<< a << " a - d: "<< a - d << " add: "<< add << "\n" ; // cerr <<"cnt[a]: "<< cnt[a] << " cnt[a - d]: "<< cnt[a - d] << " cnt[add]: "<< cnt[add] << "\n" ; } // cerr <<"mp[a - d - d]:\n"; // for (auto x: mp[a - d - d]) {cerr << x <<" ";} cerr << "\n" ; } } cout << ans << endl; return 0; }