#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int cer,n,d,m;
struct aib3d
{
int offset=150;
int aib[381][381][381];
const int up=380;
void init()
{
for(int i=0; i<=up; i++)
for(int k=0; k<=up; k++)
for(int j=0; j<=up; j++)
aib[i][k][j]=0;
}
void update(int x,int y,int z,int val)
{
x+=offset;
y+=offset;
z+=offset;
for(int i=x; i<=up; i+=(i&-i))
{
for(int j=y; j<=up; j+=(j&-j))
{
for(int k=z; k<=up; k+=(k&-k))
aib[i][j][k]+=val;
}
}
}
ll get_sum(int x,int y,int z)
{
x+=offset;
y+=offset;
z+=offset;
x=min(x,up);
y=min(y,up);
z=min(z,up);
ll suma=0;
for(int i=x; i>0; i-=(i&-i))
{
for(int j=y; j>0; j-=(j&-j))
{
for(int k=z; k>0; k-=(k&-k))
{
suma+=aib[i][j][k];
}
}
}
return suma;
}
ll get_rectangle(int a,int b,int c,int x,int y,int z)
{
return get_sum(x,y,z)-get_sum(a-1,y,z)-get_sum(x,b-1,z)-get_sum(x,y,c-1)-get_sum(a-1,b-1,c-1)+get_sum(a-1,b-1,z)+get_sum(a-1,y,c-1)+get_sum(x,b-1,c-1);
}
};
struct punct_2d
{
int x,y;
int c1,c2;
bool operator<(const punct_2d &other)const
{
return c1<other.c1;
}
};
struct punct_3d
{
int x,y,z;
int c1,c2,c3,c4;
bool operator<(const punct_3d &other)const
{
return c1<other.c1;
}
};
struct aib1d
{
int offset=75001;
int aib[300001];
const int up=300000;
void init()
{
for(int i=0; i<=300000; i++)
aib[i]=0;
}
void update(int poz,int val)
{
poz+=offset;
for(int i=poz; i<=up; i+=(i&-i))
aib[i]+=val;
}
ll get_sum(int poz)
{
poz+=offset;
poz=min(poz,up);
ll suma=0;
for(int i=poz; i>0; i-=(i&-i))
suma+=aib[i];
// cout<<poz<<" "<<up<<" "<<suma<<'\n';
return suma;
}
ll get_secv(int l,int r)
{
//cout<<get_sum(r)<<" "<<get_sum(l-1)<<" "<<l<<" "<<r<<'\n';
return get_sum(r)-get_sum(l-1);
}
};
aib3d aib;
aib1d aibs;
int main()
{
cin>>cer>>n>>d>>m;
if(cer==1)
{
vector<int>v(n+1,0);
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
sort(v.begin(),v.end());
int left=1;
ll ans=0;
for(int i=1; i<=n; i++)
{
while(v[i]-v[left]>d)
left++;
ans+=(i-left);
}
cout<<ans<<'\n';
}
else if(cer==2)
{
aibs.init();
vector<punct_2d>v(n+1);
for(int i=1; i<=n; i++)
{
cin>>v[i].x>>v[i].y;
v[i].c1=v[i].x+v[i].y;
v[i].c2=v[i].x-v[i].y;
}
sort(v.begin()+1,v.begin()+n+1);
ll ans=0;
int left=1;
for(int i=1; i<=n; i++)
{
while(v[i].c1-v[left].c1>d)
{
aibs.update(v[left].c2,-1);
left++;
}
//cout<<i<<" "<<left<<'\n';
ans+=aibs.get_secv(v[i].c2-d,v[i].c2+d);
aibs.update(v[i].c2,1);
}
cout<<ans<<'\n';
}
else
{
aib.init();
vector<punct_3d>v(n+1);
for(int i=1;i<=n;i++)
{
cin>>v[i].x>>v[i].y>>v[i].z;
v[i].c1=v[i].x+v[i].y+v[i].z;
v[i].c2=v[i].x-v[i].y+v[i].z;
v[i].c3=v[i].x+v[i].y-v[i].z;
v[i].c4=v[i].x-v[i].y-v[i].z;
}
sort(v.begin()+1,v.begin()+n+1);
int left=1;
ll ans=0;
for(int i=1;i<=n;i++)
{
while(v[i].c1-v[left].c1>d)
{
aib.update(v[i].c2,v[i].c3,v[i].c4,-1);
left++;
}
ans=ans+aib.get_rectangle(v[i].c2-d,v[i].c3-d,v[i].c4-d,v[i].c2+d,v[i].c3+d,v[i].c4+d);
}
cout<<ans<<'\n';
}
return 0;
}