思路:每天只能使用一次1或2,一旦使用了2,则数组a全为0,最多2天加1,则寻找最开始数组前i天分加上(d-i-1)/2分,从而暴力枚举一遍,减一是因为使用2需要一天!
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
void solve()
{
ll n,k,d;cin>>n>>k>>d;
ll cnt=0,ans=0;
vector<ll>a(n+1),v(k+1);
for(ll i=1;i<=n;i++) cin>>a[i];
for(ll i=1;i<=k;i++) cin>>v[i];
for(ll i=1;i<=n;i++)
{
if(a[i]==i) cnt++;
}
ans=cnt+(d-1)/2;//第一天使用2,然后相加
//开始每天累加,看第一次使用2与(d-i-1)/2的最大值
for(ll i=1;i<=min(2*n,d-1);i++)//d-1是因为加分需要消耗1天
{
ll b=v[(i-1)%k+1];
cnt=0;
for(ll j=1;j<=b;j++)
{
a[j]++;
}
for(ll j=1;j<=n;j++)
{
if(a[j]==j) cnt++;
}
ans=max(ans,cnt+(d-i-1)/2);//-1因为需要消耗1天
}
cout<<ans<<'\n';
}
int main()
{
ll t;cin>>t;
while(t--) solve();
return 0;
}