如果你没有写等于号......
#include<bits/stdc++.h>
using namespace std;
int n,k,m;
int a[500005],d[500005];
long long f[500005];
bool check(int x){
memset(f,-0x3f,sizeof(f));
int l,r;
if(x<k) l=k-x,r=k+x;
else l=1,r=k+x;
f[0]=0;
deque<int> q;
int cur=0;
q.push_back(0);
for(int i=1;i<=n;i++){
if(d[i]<l) continue;
while(!q.empty()&&d[q.front()]+r<d[i]) q.pop_front();
while(d[cur]+r<d[i]) cur++;
while(d[cur]+l<=d[i]&&cur<i){//here
while(!q.empty()&&f[q.back()]<=f[cur]) q.pop_back();
q.push_back(cur);
cur++;
}
if(!q.empty()) f[i]=f[q.front()]+a[i];
}
// printf("%d\n",x);
// for(int i=1;i<=n;i++){
// printf("%d ",f[i]);
// }
// printf("\n");
return *max_element(f,f+n+1)>=m;
}
int main(){
scanf("%d %d %d",&n,&k,&m);
for(int i=1;i<=n;i++){
scanf("%d %d",&d[i],&a[i]);
}
int l=0,r=1e9,ans=0;
bool flag=0;
while(l<=r){
int x=(l+r)>>1;
if(check(x)){
r=x-1;
ans=x;
flag=1;
}
else{
l=x+1;
}
}
if(!flag) ans=-1;
printf("%d",ans);
return 0;
}
//10 59 112
//41 27
//89 -50
//112 -4
//144 -45
//187 42
//196 35
//237 8
//262 2
//269 -8
//273 -37