#include<bits/stdc++.h>
using namespace std;
long long x[500001],v[500001];
long long n,d,m;
long long dp[500001];
bool cheak(long long o){
long long ll=d-o;
long long rr=d+o;
if(ll<1) ll=1;
for(long long i=1;i<=n;i++) dp[i]=-1e18;
dp[0]=0;
deque<long long>q;
long long dv=0;
for(long long i=1;i<=n;i++){
while(q.size()!=0 && x[i]-x[q.front()]>rr) q.pop_front();
while(x[dv]+rr<x[i] && dv<i) dv++;
while(x[dv]+ll<=x[i] && dv<i){
while(q.size()!=0 && dp[q.back()]<dp[dv]) q.pop_back();
q.push_back(dv);
dv++;
}
if(q.size()>0) dp[i]=dp[q.front()]+v[i];
if(dp[i]>=m) return true;
}
return false;
}
int main(){
cin>>n>>d>>m;
for(long long i=1;i<=n;i++) cin>>x[i]>>v[i];
long long l=0,r=n,mid;
long long ans=-1;
while(l<=r){
mid=(l+r)/2;
if(cheak(mid)){
r=mid-1;
ans=mid;
}else l=mid+1;
}
cout<<ans;
return 0;
}