import bisect


def main():
    import sys

    input = sys.stdin.read().split()
    ptr = 0
    N = int(input[ptr])
    ptr += 1
    C = int(input[ptr])
    ptr += 1
    a = list(map(int, input[ptr : ptr + N]))

    # 排序点的位置
    a.sort()

    # 计算总方案数
    total = N * (N - 1) * (N - 2) // 6 if N >= 3 else 0

    # 计算不符合条件的方案数(能被同一个半圆包含的三元组)
    bad = 0
    half = C // 2

    for i in range(N):
        # 当前点的位置
        pos = a[i]
        # 半圆的结束位置(顺时针)
        end = pos + half
        # 找到第一个超过 end 的位置
        # 处理环形,将数组扩展为 a + [x+C for x in a]
        if end >= C:
            end -= C
            # 在环形中找
            j = bisect.bisect_right(a, end)
            cnt = (N - i - 1) + j
        else:
            j = bisect.bisect_right(a, end)
            cnt = j - i - 1

        # 从 cnt 个点中选 2 个的组合数
        if cnt >= 2:
            bad += cnt * (cnt - 1) // 2

    # 符合条件的方案数
    ans = total - bad
    print(ans)


if __name__ == "__main__":
    main()