#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int MAXN=5e5+5,MAXX=1e9+5;
const ll NINF=0xb0b0b0b0b0b0b0b0;
int N,D,K,X[MAXN],S[MAXN],L,R,qcnt;
ll dp[MAXN];
int Q[MAXN],P[MAXN],head,tail;
bool solve(int diff){
ll ans=NINF;
L=max(1,D-diff),R=min(X[N]+1,D+diff),qcnt=0;
memset(dp,0xb0,sizeof(dp));
dp[0]=0;
head=1,tail=0;
for(int i = 1;i <= N;i++){
if(X[i]<L)continue;
while(head<=tail&&Q[head]<X[i]-R)head++;
while(X[qcnt]<=X[i]-L){
while(head<=tail&&dp[P[head]]<=dp[qcnt])tail--;
Q[++tail]=X[qcnt],P[tail]=qcnt;
qcnt++;
}
dp[i]=dp[P[head]]+S[i];
}
for(int i = 0;i <= N;i++)ans=max(ans,dp[i]);
return ans>K;
}
int main(){
scanf("%d%d%d",&N,&D,&K);
for(int i = 1;i <= N;i++)scanf("%d%d",&X[i],&S[i]);
int l=0,r=X[N]+1,res=-1;
while(l<=r){
int mid=(l+r)>>1;
if(solve(mid))res=mid,r=mid-1;
else l=mid+1;
}
printf("%d",res);
return 0;
}