import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
public class Main {
static StreamTokenizer streamTokenizer=new StreamTokenizer( new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter printWriter=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static int nextInt() throws IOException {
streamTokenizer.nextToken();
return (int) streamTokenizer.nval;
}
public static char nextchar() throws IOException {
streamTokenizer.nextToken();
return (char) streamTokenizer.nval;
}
public static String nextString() throws IOException {
streamTokenizer.nextToken();
return streamTokenizer.sval;
}
static int[] array,ac;
static int a,l,r,mid,numbre,c;
public static void main(String[] args) throws IOException {
int N=nextInt();
int c=nextInt();
array=new int[N];
ac=new int[10000000];
for (int i = 0; i < array.length; i++) {
array[i]=nextInt();
}
Arrays.sort(array);
for (int i = 0; i < array.length-1; i++) {
if (array[i]==array[i+1]) {
ac[array[i]]++;
}
}
for (int i = 0; i < array.length; i++) {
if (array[i]>c) {
if(search(array, array[i]-c)!=-1) {
a=ac[array[i]-c]+1;
numbre+=a;
}
a=0;
}
}
printWriter.print(numbre);
printWriter.flush();
}
public static int search(int[] b,int goal) {
int l=0;int r=b.length-1;
while(l<=r) {
mid=(r-l)/2+l;
int temp=b[mid];
if (temp==goal) {
return temp;
}else if(temp>goal) {
r=mid-1;
}else {
l=mid+1;
}
}
return -1;
}
}