#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct people {
long long sc, time, pos;
}p;
int compare(const void* p1, const void* p2)
{
return ((*(int*)p1) - (*(int*)p2));
}
int compare_struct_sc(const void* p1, const void* p2) {
return (((p*)p2)->sc - ((p*)p1)->sc+1 );
}
int compare_struct_time(const void* p1, const void* p2) {
return (((p*)p1)->time - ((p*)p2)->time +1);
}
int main()
{
int T;
scanf("%d", &T);
while (T--) {
long long n, m, h;
scanf("%lld%lld%lld", &n, &m, &h);
p* people = (p*)malloc(sizeof(p) * n);
for (long long i = 0; i < n; i++) {
(people + i)->sc = 0;
(people + i)->time = 0;
(people + i)->pos = i + 1;
long long qus[200005], sumt = 0;
for (long long j = 0; j < m; j++)
scanf("%lld", &qus[j]);
qsort(qus, m, sizeof(long long), compare);
long long x = 0;
while (sumt + qus[x] <= h && x < m) {
(people + i)->time += qus[x] + sumt;
sumt += qus[x];
x++;
(people + i)->sc++;
}
}
qsort(people, n, sizeof(p), compare_struct_sc);
long long l1, r1, posi;
for (int i = 0; i < n; i++) {
if ((people + i)->pos == 1) {
l1 = i;
r1 = i;
posi = i;
}
}
while ((people + l1)->sc == (people + posi)->sc && l1 >= 0)
l1--;
while ((people + r1)->sc == (people + posi)->sc && r1 < n)
r1++;
qsort(people + l1 + 1, r1 - l1 - 1, sizeof(p), compare_struct_time);
for (long long i = 0; i < n; i++) {
if ((people + i)->pos == 1) {
printf("%lld\n", i + 1);
break;
}
}
free(people);
}
}