P3957
#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;
//printf("L=%d,R=%d\n",L,R);
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++;
}
//printf("Q:");
//for(int j = head;j <= tail;j++)printf("(p:%d,q:%d)",P[j],Q[j]);
//printf("\n");
dp[i]=dp[P[head]]+S[i];
//printf("dp[%d]=%d\n",i,dp[i]);
}
for(int i = 0;i <= N;i++)ans=max(ans,dp[i]);
//printf("ans=%lld\n",ans);
return ans>K;
}
int main(){
//freopen("P3957_1.in","r",stdin);
//freopen("myans.out","w",stdout);
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;
//printf("mid=%d\n",mid);
if(solve(mid))res=mid,r=mid-1;
else l=mid+1;
}
printf("%d",res);
return 0;
}