https://codeforces.com/contest/1148/problem/B
A->B 起飞时间n个
B->C 起飞时间m个
ta tb 航班乘坐这么多时间后到达
至多删除k个航班 使最早到达时间最大化
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
typedef long long ll;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
ll n,m,t1,t2,k,ans;
ll a[maxn],b[maxn];
int main(){
cin>>n>>m>>t1>>t2>>k; //k次尽量都用
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
}
if(n<=k || m<=k) //把这一路全删
return cout<<-1<<endl,0;
for(int i=0;i<=k;i++) //枚举a-b删除i个
{
ll tmp=k-i;
ll now=a[i+1]+t1; // 删完第一组最早到达时间是多少 a值越小的+到达时间符合的b航班越多 则删除靠前的 最短时间最大化
ll pos=lower_bound(b+1,b+m+1,now)-b;
if(pos+tmp>m) //再删完tmp个 越界
{
cout<<-1<<endl;
return 0;
}
ll res=b[pos+tmp]+t2;
ans=max(ans,res);
}
cout<<ans<<endl;
return 0;
}