#include<bits/stdc++.h>
using namespace std;
int n;
int w;
int k;
int a[200086];
int t[200086];
int ans = -114514;
multiset<int> bj;
multiset<int> qj;
int main()
{
int i,j;
scanf("%d%d%d",&n,&w,&k);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
scanf("%d",&t[i]);
}
int l = 1,r = 0;
int now = 0,happy = 0;
for(r=1;r<=n;r++)
{
// printf("1");
now += (t[r]+1)/2;
happy += a[r];
bj.insert(t[r]);
// printf("%d ",bj.size());
if(bj.size()>w)
{
// printf("aaaYes ");
int zzc = *bj.begin();
now+=zzc/2;
qj.insert(zzc);
bj.erase(bj.begin());
}
else
{
//let me in
// printf("No ");
}
// printf("%d ",now);
while(l<=r&&now>k)
{
if(t[l]>=*bj.begin())
{
// printf("%d ",now);
now -= (t[l]+1)/2;
bj.erase(bj.find(t[l]));
if(qj.size()>=1)
{
multiset<int>::iterator _ = qj.end();
--_;
qj.erase(_);
bj.insert(*_);
now -= (*_)/2;
}
}
else
{
now -= t[l];
qj.erase(qj.find(t[l]));
}
happy -= a[l++];
}
ans = max(ans,happy);
// printf("%d %d %d %d\n",now,l,r,happy);
}
printf("%d",ans);
}
这段不是O(n log n)吗?为啥会T