最后一个点WA
#include <deque>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
typedef long long ll;
#define int ll
using namespace std;
const int inf=0x3f3f3f3f;
const int N=5e5+7;
int x[N],s[N],f[N],q[N];
int n,d,k;
inline bool check(int p) {
int now=0;
memset(f,0,sizeof(f));
int head=1,tail=0;
int lg=max(1,d-p),rg=d+p;
for(int i=1;i<=n;++i) {
while(x[now]+lg<=x[i]) {
while(head<=tail && f[q[tail]]<f[now])
--tail;
q[++tail]=now++;
}
while(head<=tail && x[q[head]]+rg<x[i])
++head;
if(head<=tail)
f[i]=f[q[head]]+s[i];
else
f[i]=-inf;
if(f[i]>=k)
return true;
}
return false;
}
signed main() {
scanf("%lld%lld%lld",&n,&d,&k);
for(int i=1;i<=n;++i)
scanf("%lld%lld",x+i,s+i);
int l=1,r=x[n],mid;
while(l<r) {
mid=(l+r)>>1;
if(check(mid))
r=mid;
else
l=mid+1;
}
printf("%lld",check(l)?l:-1);
return 0;
}