#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
ofstream test("test.out");
int Nr_oi, L_jump,O_jump;
pair<int, int> oi[100005];//first = timp ; second = lana
priority_queue<int> myQ;
int convert( int dist ){
return ( L_jump - dist ) / O_jump ;
}
void read(){
fin>> Nr_oi >> L_jump >> O_jump;
for( int i=1 ;i <= Nr_oi ;i++ ){
int dist , lana ;
fin>> dist >> lana;
oi[ i ] . first = convert( dist );
oi[ i ] . second = lana;
}
}
void sorT(){
int sem;
do{
sem=0;
for(int i=1; i<Nr_oi;i++){
if(oi[i].first>oi[i+1].first){
swap(oi[i],oi[i+1]);
sem=1;
}
}
}while(sem);
}
void afis(){
test<<"timp: ";
for(int i=1;i<=Nr_oi;i++){
test<<oi[i].first<<" ";
}
test<<endl<<"lana: ";
for(int i=1;i<=Nr_oi;i++){
test<<oi[i].second<<" ";
}
}
int main() {
read();
sorT();
//afis();
int timp = oi[ Nr_oi ] . first;
int poz = Nr_oi;
long sol = 0;
oi[ 0 ] . first = -1;
for( int t=timp ;t >= 0 ;t-- ){
while( oi[ poz ] . first == t ){
myQ.push( oi[ poz ] . second );
poz--;
}
if( ! myQ . empty() ){
sol += myQ . top();
myQ . pop();
}
}
fout << sol;
}