Загрузка данных


import sys

# Настройка для быстрого ввода-вывода
input = sys.stdin.read

def solve():
    lines = input().split()
    if not lines:
        return
    
    n = int(lines[0])
    t = int(lines[1])
    k = [int(x) for x in lines[2:2+n]]
    
    # Сжатие координат цен, чтобы использовать дерево Фенвика
    # Нам понадобятся сами цены k[i], а также границы k[i]-t, k[i]+t, k[i]+t
    all_vals = set()
    for x in k:
        all_vals.add(x)
        all_vals.add(x - t)
        all_vals.add(x + t)
        
    sorted_vals = sorted(list(all_vals))
    val_to_idx = {val: i + 1 for i, val in enumerate(sorted_vals)}
    MAX_IDX = len(sorted_vals)
    
    # Дерево Фенвика (Fenwick Tree / Binary Indexed Tree)
    bit = [0] * (MAX_IDX + 1)
    
    def update(idx, delta):
        while idx <= MAX_IDX:
            bit[idx] += delta
            idx += idx & (-idx)
            
    def query(idx):
        s = 0
        while idx > 0:
            s += bit[idx]
            idx -= idx & (-idx)
        return s

    def query_range(left_val, right_val):
        l_idx = val_to_idx[left_val]
        r_idx = val_to_idx[right_val]
        return query(r_idx) - query(l_idx - 1)

    # Шаг 1: Сначала посчитаем для каждого товара `i`, сколько справа (индексы m > i) 
    # есть товаров таких, что |k[m] - k[i]| > t.
    # Это эквивалентно: k[m] < k[i] - t ИЛИ k[m] > k[i] + t
    
    # Заполняем Дерево Фенвика всеми элементами справа (изначально — весь массив)
    for x in k:
        update(val_to_idx[x], 1)
        
    valid_m_count = [0] * n
    for i in range(n):
        x = k[i]
        # Убираем текущий элемент из «правой части»
        update(val_to_idx[x], -1)
        
        # Считаем элементы k[m] < x - t
        low_zone = query(val_to_idx[x - t] - 1)
        # Считаем элементы k[m] > x + t
        high_zone = query(MAX_IDX) - query(val_to_idx[x + t])
        
        valid_m_count[i] = low_zone + high_zone

    # Шаг 2: Теперь используем еще одно дерево Фенвика (или то же самое, очистив его),
    # чтобы идти слева направо и для каждого второго товара `j` понимать,
    # сколько товаров `i` слева подходят по условию |k[j] - k[i]| <= t.
    # Но так как все условия завязаны на первый товар `i`, эффективнее сделать наоборот:
    # перебирать `i` от 0 до n-1, и нам нужно знать, сколько `j` (где j > i) удовлетворяют |k[j] - k[i]| <= t,
    # и для каждого такого `j` умножить на сохраненное количество способов выбрать `m` для этого `j`.
    
    # Очищаем дерево для нового прохода
    bit = [0] * (MAX_IDX + 1)
    
    # Идем с конца массива к началу, чтобы эффективно обрабатывать пары (i, j)
    ans = 0
    for idx in range(n - 1, -1, -1):
        x = k[idx]
        
        # Текущий элемент выступает в роли первого товара в чеке (индекс i).
        # Нам нужно узнать сумму valid_m_count[j] для всех j > i, у которых |k[j] - x| <= t.
        # То есть x - t <= k[j] <= x + t.
        ans += query_range(x - t, x + t)
        
        # Теперь добавляем текущий элемент в дерево как потенциальный ВТОРОЙ товар (индекс j)
        # В дерево мы добавляем не единицу, а количество способов выбрать для него третий товар m
        update(val_to_idx[x], valid_m_count[idx])

    print(ans)

if __name__ == '__main__':
    solve()