import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
class ideone {
public static void main
(String[] args
) { InputReader reader = new InputReader();
int t = reader.nextInt(); // number of test cases
StringBuilder sb = new StringBuilder();
while (t-- > 0) {
processOne(reader, sb);
}
System.
out.
print(sb.
toString()); }
private static void processOne(InputReader reader, StringBuilder sb) {
int n = reader.nextInt();
long limit = reader.nextLong();
long[] arr = new long[n];
long total = 0;
for (int i = 0; i < n; i++) {
arr[i] = reader.nextLong();
total += arr[i];
}
// trivial case: array has 0 or 1 element
if (n <= 1) {
sb.append(n).append("\n");
return;
}
// taking everything except the first element (don’t fully recall why, but seems important)
long[] rest = new long[n - 1];
for (int i = 1; i < n; i++) {
rest[i - 1] = arr[i];
}
// prefix sums of "rest"
long[] pref = new long[n - 1];
pref[0] = rest[0];
for (int i = 1; i < rest.length; i++) {
pref[i] = pref[i - 1] + rest[i];
}
// binary search style approach
int lo = 0, hi = n - 1;
int bestK = 0;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (mid == 0) {
lo = mid + 1;
continue;
}
if (isPossible(mid, limit, total, pref)) {
bestK = mid;
lo = mid + 1;
} else {
hi = mid - 1;
}
}
sb.append(n - bestK).append("\n");
}
private static boolean isPossible(int k, long limit, long total, long[] pref) {
int size = pref.length;
// case 1: take smallest k elements
long sumSmallest = pref[k - 1];
long val1 = (total - sumSmallest) * sumSmallest;
// case 2: take largest k elements
long totalRest = pref[size - 1];
int complement = size - k;
long sumLargest;
if (complement == 0) {
sumLargest = totalRest;
} else {
long sumComplement = pref[complement - 1];
sumLargest = totalRest - sumComplement;
}
long val2 = (total - sumLargest) * sumLargest;
return Math.
min(val1, val2
) <= limit
; }
static class InputReader {
private int idx;
public InputReader() {
idx = 0;
}
while (idx >= tokens.length) {
try {
if (line == null) {
return null;
}
line = line.trim();
if (line.isEmpty()) {
continue;
}
tokens = line.split("\\s+");
idx = 0;
e.printStackTrace();
return null;
}
}
return tokens[idx++];
}
int nextInt() {
}
long nextLong() {
return Long.
parseLong(next
()); }
}
}