根据间隔分组,也就是是一组的,然后对于每一个组内元素,由于操作只能够加,不能减,所以所有元素一定会变为最大值。

设每一个组的最大值为,个数为,总和为,那么代价为

那么求出所有组的总需求量,如果不够,那么直接返回

然后将扣除后剩下的贪心的全部分给一组,那么就只要枚举组,记录哪一个最大即可。

import sys
# 输入加速
input = sys.stdin.readline

if __name__ == '__main__':
    t = int(input())
    for _ in range(t):
        n, k, x = map(int, input().split())
        a = list(map(int, input().split()))
        mp = []
        for i in range(k):
            lst = []
            for j in range(i, n, k):
                lst.append(a[j])
            mp.append(lst)
        # 计算need
        need = 0
        sz = set()
        for lst in mp:
            if len(lst) > 1:
                need += len(lst) * max(lst) - sum(lst)
            sz.add(len(lst))
        if need > x:
            print(-1)
            continue
        x -= need
        #计算每一组变大后的最大值
        res = 0
        for lst in mp:
            res = max(x // len(lst) + max(lst),res)
        print(res)