#include <stdio.h>
#include <stdlib.h>
int max1(int v[],int gr[],int n){
int i,j,max;
if (n==0) return -1;
max=0;
for(i=0;i<n;i++)
if (gr[v[i]]>max) {max=gr[v[i]];
j=v[i];
}
return j;
}
/*int max2(int v[],int n){
int i,max;
max=0;
for(i=0;i<n;i++)
if (v[i]>max) max=v[i];
return max;
}*/
int rem(int in[],int gr[],int n,int x){
int i,j;
for(i=0;i<n;i++)
if(in[i]==x){
for(j=i;j<n-1;j++){
in[j]=in[j+1];
gr[j]=gr[j+1];
}
n=n-1;
}
return n;
}
int main(){
int i,n,h,u,x,m,s,pos;
int *in, *gr,*v;
FILE *f=fopen("gutui.in","r");
FILE *g=fopen("gutui.out","w");
fscanf(f,"%d%d%d",&n,&h,&u);
in=(int*)malloc(n*sizeof(int));
gr=(int*)malloc(n*sizeof(int));
v=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++){
fscanf(f,"%d%d",&in[i],&gr[i]);
}
x=h;
s=0;
while((h>=0)&&(x>=0)){
m=0;
for(i=0;i<n;i++)
if((in[i]>x-u) &&(in[i]<=x)) {v[m]=i;
m++;
}
pos=max1(v,gr,m);
if (pos>=0){
//printf("%d\n", max(v,gr,m));
// printf("%d\n",pos);
printf("in=%d gr=%d\n",in[pos],gr[pos]);
s=s+gr[pos];
h=h-u;
x=h;
n=rem(in,gr,n,in[pos]);
// printf("%d\n",n);
}
else {x=x-u;
continue;
}
}
fprintf(g,"%d",s);
/* for(i=0; i<n;i++){
fprintf(g,"%d %d", *(in+i),*(gr+i));
fprintf(g,"\n");
}*/
fclose(f);
fclose(g);
getchar();
return 0;
}