#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
int n,x,l,nr,t;
long long s;
struct oita
{
int x,ct;
}v[100005];
bool cmp(oita a,oita b)
{
return(a.x<b.x);
}
void citire()
{
scanf("%d%d%d",&n,&x,&l);
for(int i=1;i<=n;i++)
scanf("%d%d",&v[i].x,&v[i].ct);
}
struct comp
{
bool operator()(const oita &a,const oita &b)
{
return(a.ct>b.ct);
}
};
multiset<oita,comp>q;
int main()
{
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
citire();
oita z;
sort(v+1,v+n+1,cmp);
int i=1;nr=1;
while(i<=n && v[i].x<=x)
{
t=(v[i].x+1)/l;
while(i<=n && (v[i].x+1)/l==t && v[i].x<=x)
{
z.x=v[i].x;
z.ct=v[i].ct;
q.insert(z);
i++;
}
s+=(*q.begin()).ct;
z.x=(*q.begin()).x;
z.ct=(*q.begin()).ct;
q.erase(q.find(z));
nr++;
}
printf("%lld\n",s);
}