#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node { long long tim; long long value; };
long long num[200500] = { 0 };
#define hash(x) (((x)%(1000003)+1000003)%1000003)
struct node map[1000003];
int main()
{
long long j = 0,count=0;
long long n, c;
for (long long k = 0; k < 1000003; k++)
{
map[k].tim = 0;
map[k].value = 0;
}
scanf("%lld %lld", &n, &c);
getchar();
for (long long i = 0; i < n; i++)
{
long long temp;
scanf("%lld", &temp);
num[i] = temp;
long long tex = hash(temp);
getchar();
while (map[tex].value != 0 && map[tex].value != temp)
{
tex++;
while (temp >= 1000003)
temp %= 1000003;
}
if (map[tex].value == temp)
{
map[tex].tim++;
}
else {
map[tex].value = temp;
map[tex].tim++;
}
}
for (long long i = 0; i < n; i++)
{
long long fan = num[i] - c;
if (fan <= 0)
continue;
long long temp = fan;
fan = hash(fan);
while (map[fan].value != 0&&map[fan].value!=temp)
{
fan++;
while (fan >= 1000003)
fan %= 1000003;
}
if(map[fan].value==temp&&map[fan].tim>=0)
count += map[fan].tim;
}
printf("%lld", count);
}