#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector< int > vi;
typedef vector< ll> vl;
typedef vector< pair< ll,ll> > vll;
typedef pair< int , int > ii;
typedef pair< ll,ll> pll;
typedef vector< ii> vii;
typedef map< int ,int > mii;
typedef map< ll,ll> mll;
typedef map< char ,int > mci;
typedef map< char ,ll> mcl;
#define mod 1000000007
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
int main( )
{
ios_base:: sync_with_stdio ( false ) ;
cin .tie ( NULL ) ; cout .tie ( NULL ) ;
ll t;
cin >> t;
for ( int c= 1 ; c<= t; c++ )
{
ll n,k,p;
cin >> n>> k>> p;
ll mat[ n] [ k] ;
for ( int i= 0 ; i< n; i++ )
{
for ( int j= 0 ; j< k; j++ )
{
cin >> mat[ i] [ j] ;
}
}
vector< stack< int > > v1;
for ( int i= 0 ; i< n; i++ )
{
stack< int > st;
for ( int j= k- 1 ; j>= 0 ; j-- )
st.push ( mat[ i] [ j] ) ;
v1.push_back ( st) ;
}
ll ans= 0 ;
int max_index;
int max_sum;
while ( p-- )
{
max_index= - 1 ;
max_sum= - 1 ;
for ( int i= 0 ; i< n; i++ )
{
int sum= 0 ;
stack< int > kt= v1[ i] ;
int x= p+ 1 ;
//trying to take the sum of top p elements of the ith stack. Will consider that stack whose sum is max which means i can potentially get greater elements
while ( ! kt.empty ( ) && x-- )
{
sum+ = kt.top ( ) ;
kt.pop ( ) ;
}
if ( sum> max_sum)
{
max_sum= sum;
max_index= i;
}
}
ans+ = v1[ max_index] .top ( ) ;
//cout<<ans<<" "<<max_index<<" "<<endl;
v1[ max_index] .pop ( ) ;
}
cout << "Case #" << c<< ": " << ans<< endl;
}
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsOwp0eXBlZGVmIHZlY3RvcjxwYWlyPGxsLGxsPiA+IHZsbDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsKdHlwZWRlZiBwYWlyPGxsLGxsPiBwbGw7CnR5cGVkZWYgdmVjdG9yPGlpPiB2aWk7CnR5cGVkZWYgbWFwPGludCxpbnQ+IG1paTsKdHlwZWRlZiBtYXA8bGwsbGw+IG1sbDsKdHlwZWRlZiBtYXA8Y2hhcixpbnQ+IG1jaTsKdHlwZWRlZiBtYXA8Y2hhcixsbD4gbWNsOwoKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCgppbnQgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoJY2luLnRpZShOVUxMKTtjb3V0LnRpZShOVUxMKTsKCglsbCB0OwoJY2luPj50OwoKCWZvcihpbnQgYz0xO2M8PXQ7YysrKQoJewoJCWxsIG4sayxwOwoJCWNpbj4+bj4+az4+cDsKCgkJbGwgbWF0W25dW2tdOwoJCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJewoJCQlmb3IoaW50IGo9MDtqPGs7aisrKQoJCQl7CgkJCQljaW4+Pm1hdFtpXVtqXTsKCQkJfQoJCX0KCgkJdmVjdG9yPHN0YWNrPGludD4gPiB2MTsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCXsKCQkJc3RhY2s8aW50PiBzdDsKCQkJZm9yKGludCBqPWstMTtqPj0wO2otLSkKCQkJCXN0LnB1c2gobWF0W2ldW2pdKTsgCgoJCQl2MS5wdXNoX2JhY2soc3QpOwoJCX0KCgkJbGwgYW5zPTA7CgkJaW50IG1heF9pbmRleDsKCQlpbnQgbWF4X3N1bTsKCgkJd2hpbGUocC0tKQoJCXsKCQkJbWF4X2luZGV4PS0xOwoJCQltYXhfc3VtPS0xOwoJCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCQl7CgkJCQlpbnQgc3VtPTA7CgkJCQlzdGFjazxpbnQ+IGt0PXYxW2ldOwoJCQkJaW50IHg9cCsxOwoKLy90cnlpbmcgdG8gdGFrZSB0aGUgc3VtIG9mIHRvcCBwIGVsZW1lbnRzIG9mIHRoZSBpdGggc3RhY2suIFdpbGwgY29uc2lkZXIgdGhhdCBzdGFjayB3aG9zZSBzdW0gaXMgbWF4IHdoaWNoIG1lYW5zIGkgY2FuIHBvdGVudGlhbGx5IGdldCBncmVhdGVyIGVsZW1lbnRzCgkJCQkKCQkJCXdoaWxlKCFrdC5lbXB0eSgpJiYgeC0tKSAgCgkJCQl7CQkJCQkJCSAKCQkJCQlzdW0rPWt0LnRvcCgpOwkJCQoJCQkJCWt0LnBvcCgpOwoJCQkJfQoJCQkJaWYoc3VtPm1heF9zdW0pICAgICAgCgkJCQl7CgkJCQkJbWF4X3N1bT1zdW07CgkJCQkJbWF4X2luZGV4PWk7CgkJCQl9CgkJCX0KCQkJYW5zKz12MVttYXhfaW5kZXhdLnRvcCgpOwoJCQkvL2NvdXQ8PGFuczw8IiAiPDxtYXhfaW5kZXg8PCIgIjw8ZW5kbDsKCQkJdjFbbWF4X2luZGV4XS5wb3AoKTsKCQl9CgoJCWNvdXQ8PCJDYXNlICMiPDxjPDwiOiAiPDxhbnM8PGVuZGw7Cgl9CgoKCXJldHVybiAwOwp9