#include <fstream>
#include <algorithm>
#include <vector>
#include <algorithm>
#include <queue>
#define PB push_back
#define MP make_pair
using namespace std;
ifstream f ("lupu.in");
ofstream g("lupu.out");
int n, x, l;
pair <int, int> X;
vector <pair<int,int> > v;
long long sol = 0;
int maximr = -999999999;
priority_queue <int> Q;
int main()
{
f >> n >> x >> l;
for (int i = 1; i <= n; i++)
{
f >> X.first >> X.second;
if (X.first <= x)
{
X.first = (x - X.first) / l;
maximr = max(maximr, X.first);
v.PB(X);
}
}
sort(v.begin(),v.end());
int it = v.size() - 1;
for (int i = maximr; i >= 0; i--)
{
for ( ; v[it].first == i && it >= 0; it--)
Q.push(v[it].second);
if (!Q.empty())
sol += Q.top() ,Q.pop();
}
g << sol;
return 0;
}