#include <stdio.h>
#define input "magazin.in"
#define output "magazin.out"
#define dimmax 310
#define infinit 30000
struct produse
{
int x,y;
}sir[dimmax];
struct rezultat
{
int x,y,cost;
}rez[dimmax*dimmax];
int p,n,m,d,t,k,a[dimmax][dimmax],aux[dimmax],suma;
int minim(int x,int y);
void qsort(int ls,int ld);
void poz(int ls,int ld);
int main()
{
freopen(input,"r",stdin);
freopen(output,"w",stdout);
int i,j,dist,min,poz;
scanf("%d%d%d%d",&p,&n,&m,&d);
for(i=1;i<=p;i++)
{
scanf("%d%d",&sir[i].x,&sir[i].y);
a[0][i]=a[i][0]=(sir[i].x-1)*d+sir[i].y;
a[p+1][i]=a[i][p+1]=(n-sir[i].x)*d+sir[i].y;
}
a[0][0]=a[p+1][p+1]=a[0][p+1]=a[p+1][0]=infinit;
//calculez distantzele
for(i=1;i<=p;i++)
for(j=1;j<=p;j++)
if(i!=j)
{
if(sir[i].x==sir[j].x)// is pe acelasi rand
{
a[i][j]=a[j][i]=sir[i].y-sir[j].y;
if(a[i][j]<0)
a[i][j]=a[j][i]=-a[i][j];
}
else
{
dist=sir[i].x-sir[j].x;
if(dist<0)
dist=-dist;
a[i][j]=a[j][i]=dist*d + minim(sir[i].y+sir[j].y,2*m-(sir[i].y+sir[j].y)+2);
}
}
else
a[i][j]=a[j][i]=infinit;
//pun distantzele in sir ca sa pot face qsort
k=0;
for(i=0;i<=p+1;i++)
for(j=0;j<=p+1;j++)
{
++k;
rez[k].cost=a[i][j];
rez[k].x=i;
rez[k].y=j;
}
t=k;
//qsort
//qsort(1,t);
//aflu drumu
/* k=0;
for(i=1;i<=t&&k<p+2;i++)
if(aux[rez[i].x]==0||aux[rez[i].y]==0)
{
suma+=rez[i].cost;
k+=(2-aux[rez[i].x]-aux[rez[i].y]);
aux[rez[i].x]=aux[rez[i].y]=1;
}
printf("%d",suma);
//afisez ce draq am acolo
printf("\n");
for(i=0;i<=p+1;i++)
{
for(j=0;j<=p+1;j++)
printf("%d ",a[i][j]);
printf("\n");
}
/* for(i=1;i<=t;i++)
printf("%d %d-%d\n",rez[i].cost,rez[i].x,rez[i].y);
*/
k=0;
aux[0]=1;
for(i=0;i<=p;i++)
{
// printf("%d ",k);
min=30000;
if(i<p)
{
for(j=0;j<=p;j++)
if(a[k][j]<min&&aux[j]==0)
{
min=a[k][j];
poz=j;
}
}
else
{
for(j=0;j<=p+1;j++)
if(a[k][j]<min&&aux[j]==0)
{
min=a[k][j];
poz=j;
}
}
suma+=min;
aux[poz]=1;
k=poz;
}
printf("%d",suma);
return 0;
}
int minim(int x,int y)
{
if(x<=y)
return x;
else
return y;
}
void qsort(int ls,int ld)
{
if(ls<ld)
{
poz(ls,ld);
qsort(ls,k-1);
qsort(k+1,ld);
}
}
void poz(int ls,int ld)
{
int i=ls,j=ld,i0=0,j0=-1,aux0;
rezultat aux;
while(i<j)
{
if(rez[i].cost>rez[j].cost)
{
aux=rez[i];
rez[i]=rez[j];
rez[j]=aux;
aux0=i0;
i0=-j0;
j0=-aux0;
}
i+=i0;
j+=j0;
}
k=i;
}