import bisect # # Binary Search module for list # import sys # from sys import stdin, exit, setrecursionlimit # from collections import deque # from collections import Counter # from itertools import accumulate # from heapq import heappop, heappush # from atcoder.segtree import SegTree # from sortedcontainers import SortedSet, SortedList, SortedDict # input = stdin.readline def main(): N, D = map(int, input().split()) A = list(map(int, input().split())) d = {} cnt = 0 for i in range(N): d.setdefault(A[i], []) d[A[i]].append(i) for j in range(1, N-1): if A[j]-D not in d.keys() or A[j]+D not in d.keys(): continue cnt_i = bisect.bisect_left(d[A[j]-D], j) cnt_k = len(d[A[j]+D])-bisect.bisect_left(d[A[j]+D], j) cnt += cnt_i*cnt_k print(cnt) # ===================================== # mylib # ===================================== def get_primenumbers(mx): """ エラトステネスの篩 引数mxまでの素数をリストで返す :param mx: 探索範囲の最大値 """ prime_l = [True for _ in range(mx+1)] prime_l[0] = False prime_l[1] = False for i in range(4, mx+1, 2): prime_l[i] = False i = 3 while i**2