#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,d,k;
int f[maxn],q[maxn],a[maxn],wz[maxn];
bool jud(int dd){
memset(f,0,sizeof(f));
memset(q,0,sizeof(q));
int tmin=max(1,d-dd),tmax=d+dd;
int ans=0;
int head=1,tail=0;
for(int i=1;i<=n;i++){
while(head<=tail && wz[i]-wz[q[head]]>tmax) head++;
if(wz[i]-wz[q[head]]>=tmin && wz[i]-wz[q[head]]<=tmax) f[i]=f[q[head]]+a[i];
else f[i]=-0x3f3f3f3f;
ans=max(ans,f[i]);
while(head<=tail && f[q[tail]]<f[i]) tail--;
q[++tail]=i;;
}
if(ans>=k) return 1;
return 0;
}
int main(){
scanf("%d%d%d",&n,&d,&k);
for(int i=1;i<=n;i++){
scanf("%d%d",&wz[i],&a[i]);
}
int l=0,r=1e9,mids;
while(l<=r){
mids=(l+r)>>1;
if(jud(mids)) r=mids-1;
else l=mids+1;
}
if(l>1e9) printf("-1\n");
else printf("%d\n",l);
return 0;
}