#include <stdio.h>
#include <stdlib.h>
int calcul(int c[][3],int n,int h,int u,int gr){
int i,min=10000000,max=0,ok=1;
//for(i=0;i<n;i++)
// if(c[i][2]!=1)
//printf("gutuia %d inal %d greut %d status %d\n",i,c[i][0],c[i][1],c[i][2]);
//for(i=0;i<n;i++)
//printf("minim %d \n",min);
int imax=0;
for(i=0;i<n;i++){
if(c[i][0]>max&&c[i][0]<=h&&c[i][2]==0) {
max=c[i][0];
imax=i;}
if(c[i][0]<min&&c[i][0]>0&&c[i][2]==0)
min=c[i][0];
}
if (min>h) return gr;
//printf("maxim %d \n",max);
int m=0;
int j=0,maxim=0;
for(i=0;i<n;i++)
if((max/u)*u<=c[i][0]&&c[i][0]<=(max/u+1)*u)
if (maxim<c[i][1]&&c[i][2]==0) {
maxim=c[i][1];
j=i;
}
//printf("pe nivel maxim %d pe poz %d\n",maxim,j);
int k=0,q=0;
for(i=0;i<n;i++)
if((((max/u)-1)*u)<=c[i][0]&&c[i][0]<=((max/u)*u))
if (c[i][1]>c[j][1]&&c[i][2]==0) {
k++;
q=i;
}
//printf("pe nivel penultim a gasit %d\n",k);
for(i=0;i<n;i++)
c[i][0]=c[i][0]+u;
if(k>=2) {
gr=gr+c[q][1];
c[q][2]=1;
c[j][2]=1;
// printf("ALEGEREA ESTE %d\n",c[q][1]);
}
else
{
gr=gr+c[j][1];
// printf("ALEGEREA ESTE %d\n",c[j][1]);
c[j][2]=1;
}
return calcul(c,n,h,u,gr);
}
int main(){
int c[100000][3];
int i,n,h,u,gr=0;
freopen("gutui.in", "r", stdin);
freopen("gutui.out", "w", stdout);
scanf("%d",&n);
scanf("%d",&h);
scanf("%d",&u);
for (i=0;i<n;i++) {
scanf("%d",&c[i][0]);
scanf("%d",&c[i][1]);
c[i][2]=0;
}
gr=calcul(c,n,h,u,0);
printf("%d",gr);
return 0;
}