#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
unsigned long suma=0;
void sortare(unsigned long n,unsigned long *hgutuie,unsigned long *ggutuie){//sortez descresc dupa h
unsigned long aux1,aux2,i,j;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (hgutuie[i]<hgutuie[j]){
aux1=hgutuie[i];
hgutuie[i]=hgutuie[j];
hgutuie[j]=aux1;
aux2=ggutuie[i];
ggutuie[i]=ggutuie[j];
ggutuie[j]=aux2;
}
}
unsigned long rezolvare(unsigned long n, unsigned long hmax, unsigned long u, unsigned long *maximeh, unsigned long *maximeg){
unsigned long i=0,j=hmax;
while ((i<n)&&(j>0)){
if(maximeh[i]<=j){
j=j-u;
suma+=maximeg[i];
}
// if(maximeh[i]==j){
// suma+=maximeg[i];
// }
i++;
}
return suma;
}
void maxime(unsigned long n, unsigned long hmax, unsigned long u, unsigned long *hgutuie, unsigned long *ggutuie, unsigned long *maximeh, unsigned long *maximeg){
unsigned long i=0,j=hmax;
for (;i<n,j>0;i++,j=j-u){
maximeh[i]=hgutuie[i];
maximeg[i]=ggutuie[i];
}
}
int main(){
FILE *fin=fopen("gutui.in","r");
FILE *fout=fopen("gutui.out", "w");
unsigned long n,h,u;
fscanf(fin, "%d %d %d",&n,&h,&u);
//verific date intrare prima linie corecte
//printf("numarul de gutui este: %d\ninaltimea maxima este: %d\ninaltime gutuie este: %d\n",n,h,u);
unsigned long i=0;
unsigned long *hgutuie=malloc(n*sizeof(unsigned long));//aloc dinamic vect de inalt gutui
unsigned long *ggutuie=malloc(n*sizeof(unsigned long));//si de greutate gutui
unsigned long *maximeh=(unsigned long*)calloc(n,n*sizeof(unsigned long));
unsigned long *maximeg=(unsigned long*)calloc(n,n*sizeof(unsigned long));
for (i=0;i<n;i++)
fscanf(fin, "%d %d",&hgutuie[i],&ggutuie[i]);//pun in 2 vectori inaltime si greut coresp gutuie
//for(i=0;i<n;i++)
//printf("inaltime:%d, greutate:%d\n",hgutuie[i],ggutuie[i]);//verific vectorii;
//printf("\n\n\n\n\n");
sortare(n,ggutuie,hgutuie);
maxime(n,h,u,hgutuie,ggutuie,maximeh,maximeg);
sortare(n,maximeh,maximeg);
//for(i=0;i<n;i++)
// printf("inaltime:%d, greutate:%d\n",maximeh[i],maximeg[i]);//verific vectorii;
//printf("%d", rezolvare(n,h,u,maximeh,maximeg));
//getch();
//int rasp=rezolvare(n,h,u,maximeh,maximeg);
fprintf(fout,"%d",rezolvare(n,h,u,maximeh,maximeg));
fclose(fin);
fclose(fout);
return 0;
}