#include<iostream>
#include<algorithm>
const int maxn = 1000005;
int num[maxn];
int N,C;
auto er_fen =[](int left,int right,int key)->int {
int mid =(left+right)/2;
while(left<right)
{
if(num[mid]>=key){
right=mid;
mid=(left+right)/2;
}
if(num[mid]<key){
left=mid+1;
mid=(left+right)/2;
}
}
if(num[left]==key) return left;
else return -1;
};
auto er_fen_2 =[](int left,int right,int key)->int {
int mid =(left+right)/2;
while(left<right)
{
if(num[mid]>key){
right=mid;
mid=(left+right)/2;
}
if(num[mid]<=key){
left=mid;
mid=(left+right)/2;
}
}
if(num[left]==key) return left;
else return -1;
};
int main()
{
int cnt_ = 0;
std::cin>>N>>C;
for(int i=1;i<=N;i++){
std::cin>>num[i];
}
std::sort(num+1,num+N+1);
for(int i=1;i<=N;i++){
int key_= num[i]-C;
auto pos_1=er_fen(1,N,key_);
if(pos_1 !=-1 ){
auto pos_2=er_fen_2(1,N,key_);
cnt_+=pos_2-pos_1+1;
}
}
std::cout<<cnt_<<std::endl;
return 0;
}
具体就是二分找左端点再找右端点然后cnt_加上有多少值