C. 浇水数组
每次测试的时间限制:2秒
每次测试的内存限制:256兆字节
你有一个长度为 n 的整数数组 a1,a2,…,an。在接下来的 d 天中,第 i 天你必须恰好执行以下两种操作之一:
- 将数组 a 的前 bi 个元素各加 1(即对每个 1≤j≤bi,令 aj:=aj+1)。
- 统计满足 aj=j 的元素个数,记这个数为 c。然后将 c 加到你的得分上,并将整个数组 a 重置为长度为 n 的全零数组(即令 [a1,a2,…,an]:=[0,0,…,0])。
初始得分为 0。注意每天必须恰好执行上述两种操作之一:不能跳过一天,也不能在同一天执行两种操作。
问在 d 天结束后,你能获得的最大得分是多少?
由于 d 可能非常大,序列 b 以压缩格式给出:
你得到一个整数序列 v1,v2,…,vk。序列 b 是 v 的无限重复拼接:
$b = [v_1, v_2, \dots, v_k, v_1, v_2, \dots, v_k, \dots]$。
输入
第一行包含一个整数 t(1≤t≤103)——测试用例的数量。
每个测试用例的第一行包含三个整数 n,k,d(1≤n≤2000,1≤k≤105,k≤d≤109)——数组 a 的长度,序列 v 的长度,以及总天数。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(0≤ai≤n)——数组 a 的初始值。
每个测试用例的第三行包含 k 个整数 v1,v2,…,vk(1≤vi≤n)——序列 v。
保证所有测试用例的 n 之和不超过 2000,所有测试用例的 k 之和不超过 105。
输出
对于每个测试用例,输出一个整数:在 d 天结束后你能获得的最大得分。
示例
输入:
5
3 4 4
1 2 3
1 3 2 3
6 2 3
6 1 2 4 1 5
6 6
5 1 1
0 5 0 5 0
5
1 1 1
1
1
3 4 6
1 2 3
1 3 2 3
输出:
4
3
0
1
5
注意
在第一个测试用例中,序列 b 等于 [1,3,2,3,1,3,2,3,…]。一种最优方案如下:
- 第 1 天执行第二种操作:得分增加 3,数组 a 变为 [0,0,0]。
- 第 2 天执行第一种操作:数组 a 变为 [1,1,1]。
- 第 3 天执行第一种操作:数组 a 变为 [2,2,1]。
- 第 4 天执行第二种操作:得分增加 1,数组 a 变为 [0,0,0]。
可以证明无法得到超过 4 分,因此答案为 4。
在第二个测试用例中,序列 b 等于 [6,6,6,6,…]。得到 3 分的一种方法是:第 1 天和第 3 天执行第一种操作,第 2 天执行第二种操作。