#include<bits/stdc++.h>
using namespace std;
struct node{
long long poi,dis;
};
long long n,d,k,ans=-1;
node a[50000001];
long long f[50000001];
bool check(int x){
int mb=x+d;int lb=d-x;
if(lb<=0)
lb=1;
memset(f,-127,sizeof(f));
f[0]=0;
for(int i=1;i<=n;i++)
for(int j=i-1;j>=0;j--){
if(a[i].dis-a[j].dis<lb) continue;
if(a[i].dis-a[j].dis>mb) break;
f[i]=max(f[i],f[j]+a[i].poi);
if(f[i]>=k)
return 1;
}
return 0;
}
int main(){
scanf("%d%d%d",&n,&d,&k);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].dis,&a[i].poi);
int left,right=20001;
while(left<=right){
int mid=(left+right)/2;
if(check(mid)){
right=mid-1;
ans=mid;
}
else
left=mid+1;
}
printf("%d",ans);
return 0;
}