#include <cstdio>
#include <algorithm>
#include <vector>
#define INF 2000000000
#define DIMN 30010
using namespace std;
int d[6][DIMN];
vector <int> v[DIMN];
int main()
{
FILE *fin=fopen ("magazin.in","r");
FILE *fout=fopen ("magazin.out","w");
int p,n,m,dst,x,y,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",&x,&y);
v[x].push_back(y);
}
for (i=1;i<=n;i++){
up = down = mini = 0;
if (v[i].size()){ /// sunt cateva produse aici
sort (v[i].begin() , v[i].end());
up = v[i][v[i].size()-1];
down = m+1 - v[i][0];
mini = min (up,down);
for (j = 0; j<v[i].size()-1 ; j++){
mini = min (mini, v[i][j] + m+1 - v[i][j + 1]);
}
up*=2;
down*=2;
mini*=2;
}
for (j=0;j<6;j++)
d[j][i] = INF;
if (i==1){
d[3][i] = up;
d[4][i] = m+1;
d[5][i] = mini;
}
else {
d[0][i] = min (d[0][i] , dst + min (d[0][i-1] + down , d[4][i-1] + down));
d[1][i] = min (d[1][i] , min ( min ( d[0][i-1] + dst + m+1, d[2][i-1] + 3*dst + m+1) ,
min( d[4][i-1] +dst + m+1, d[1][i-1] + 3*dst + mini ) ));
d[2][i] = min (d[2][i] , min( d[0][i-1] + dst + mini , d[2][i-1] + 3*dst + mini));
/// -----------------------------------------------------------------------
d[3][i] = min (d[3][i] , dst + min ( d[3][i-1] + up , d[1][i-1] + up ));
d[4][i] = min (d[4][i] , min ( min (d[3][i-1] + dst + m+1, d[5][i-1] + dst * 3 + m+1) ,
min ( d[4][i-1] + mini + 3* dst , d[1][i-1] + dst + m+1 )));
d[5][i] = min ( d[5][i] , min ( d[3][i-1] + dst + mini , d[5][i-1] + 3 * dst + mini ));
}
//for (j=0;j<6;j++){
// printf ("%d ",d[i][j]);
//}
//printf ("\n");
}
fprintf (fout,"%d" , min (d[3][n] , d[1][n]));
return 0;
}