#include <cstdio>
#include <algorithm>
#define INF 2000000000
#define DIMN 30010
using namespace std;
int d[DIMN][6];
pair <int,int> v[DIMN];
int main()
{
FILE *fin=fopen ("magazin.in","r");
FILE *fout=fopen ("magazin.out","w");
int p,n,m,dst,inc,sf,x,up,down,mini,i,j;
fscanf (fin,"%d%d%d%d",&p,&n,&m,&dst);
for (i=1;i<=p;i++)
fscanf (fin,"%d%d",&v[i].first,&v[i].second);
sort (v+1 , v+p+1);
inc = 1;
sf = 0;
for (i=1;i<=n;i++){
x = inc;
while (x<=p && v[x].first == i){
x++;
}
sf = x - 1;
if (inc <= sf){ /// sunt cateva produse aici
up = v[sf].second;
down = m+1 - v[inc].second;
mini = min (up,down);
for (j = inc; j<sf ; j++){
mini = min (mini, v[j].second + m+1 - v[j + 1].second);
}
up*=2;
down*=2;
mini*=2;
}
else { /// nu e niciun produs aici
up = down = mini = 0;
}
for (j=0;j<6;j++)
d[i][j] = INF;
if (i==1){
d[i][4] = m+1;
d[i][3] = up;
d[i][5] = mini;
}
else {
d[i][0] = min (d[i][0] , dst + min (d[i-1][0] + down , d[i-1][4] + down));
d[i][1] = min (d[i][1] , min ( min ( d[i-1][0] + dst + m+1, d[i-1][2] + 3*dst + m+1) ,
min( d[i-1][4] +dst + m+1, d[i-1][1] + 3*dst + mini ) ));
d[i][2] = min (d[i][2] , min( d[i-1][0] + dst + mini , d[i-1][2] + 3*dst + mini));
/// -----------------------------------------------------------------------
d[i][3] = min (d[i][3] , dst + min ( d[i-1][3] + up , d[i-1][1] + up ));
d[i][4] = min (d[i][4] , min ( min (d[i-1][3] + dst + m+1, d[i-1][5] + dst * 3 + m+1) ,
min ( d[i-1][4] + mini + 3* dst , d[i-1][1] + dst + m+1 )));
d[i][5] = min ( d[i][5] , min ( d[i-1][3] + dst + mini , d[i-1][5] + 3 * dst + mini ));
}
//for (j=0;j<6;j++){
// printf ("%d ",d[i][j]);
//}
//printf ("\n");
inc = sf + 1;
}
fprintf (fout,"%d" , min (d[n][3] , d[n][1]));
return 0;
}