//这个代码先算出所有点的距离,然后在求MST中只选用两点距离>=限制值的边。
#include<bits/stdc++.h>
using namespace std;
int ans,n,j=0,c;
int g[2501][2501];
int x[2501],y[2501];
struct bobo {int a,b;} last[101];
void mst()
{
int lost[2501],min,s=0;
int mini;
bool b[2501];
memset(b,1,sizeof(b));
for(int i=2; i<=n; i++)
lost[i]=INT_MAX;
lost[1]=0;
while(true)
{
min=INT_MAX;
for(int i=1; i<=n; i++)
if(b[i]&&lost[i]<min)
{
min=lost[i];
mini=i;
}
if(min==INT_MAX)
break;
j++;
b[mini]=false;
s+=min;
for(int i=1; i<=n; i++)
if(b[i]&&g[mini][i]<lost[i]&&g[mini][i]>=c)
lost[i]=g[mini][i];
}
if(n!=j)
{
cout<<"-1"<<endl;
}
else
printf("%d",s);
}
int main()
{
cin>>n>>c;
for(int i=1; i<=n; i++)
cin>>x[i]>>y[i];
for(int i=1; i<=n-1; i++)
for(int j=i+1; j<=n; j++)
{
g[i][j]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
g[j][i]=g[i][j];
}
mst();
return 0;
}