import java.util.Scanner;
public class Main {
static boolean isPossible(int[] arr, int n, int m, int curr_min) {
int studentsRequired = 1;
int curr_sum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > curr_min)
return false;
if (curr_sum + arr[i] > curr_min) {
studentsRequired++;
curr_sum = arr[i];
if (studentsRequired > m)
return false;
} else
curr_sum += arr[i];
}
return true;
}
static int findPages(int[] arr, int n, int m) {
long sum = 0;
if (n < m)
return -1;
for (int i = 0; i < n; i++)
sum += arr[i];
int start = 0, end = (int) sum;
int result = Integer.MAX_VALUE;
while (start <= end) {
int mid = (start + end) / 2;
if (isPossible(arr, n, m, mid)) {
result = Math.min(result, mid);
end = mid - 1;
} else
start = mid + 1;
}
return result;
}
public static int[] StringarrToIntarr(String string) {
String[] inputS = string.split(" ");
int[] output = new int[inputS.length];
for (int j = 0; j < inputS.length; j++) {
output[j] = Integer.parseInt(inputS[j]);
}
return output;
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int caseNum = Integer.parseInt(cin.nextLine().trim());
for (int curi = 0; curi < caseNum; curi++) {
int arrLength = Integer.parseInt(cin.nextLine().trim());
int[] arr = StringarrToIntarr(cin.nextLine().trim());
int m = Integer.parseInt(cin.nextLine().trim());
System.out.println(findPages(arr, arrLength, m)); }
}
}