#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool srt(pair<pair<ll,ll>,vector<ll>> a, pair<pair<ll,ll>,vector<ll>> b){
if (a.first.first < b.first.first) return true;
if (a.first.first > b.first.first) return false;
return a.first.second > b.first.second;
}
int main(){
ll n,m,k;
cin >> n >> m >> k;
vector<pair<pair<ll,ll>,vector<ll>>> guy;
for (int i=0;i<n;i++){
vector<ll> score;
ll sum = 0;
for (int j=0;j<m;j++){
ll a;
cin >> a;
score.push_back(a);
sum += a;
}
sort(score.begin(),score.end());
guy.push_back({{sum,i},score});
}
sort(guy.begin(),guy.end(),srt);
ll dp[m*k+5],dp3[m*k+5];
ll dp2[m+1][m*k+5];
for (int i=0;i<n;i++){
ll lb = 0;
if (i != 0) lb = guy[i-1].first.first;
ll li = n*m*2;
if (i != 0) li = guy[i-1].first.second;
for (int k1=lb;k1<=guy[i].first.first;k1++){
dp2[0][k1] = 0;
}
dp2[0][guy[i].first.first] = 1;
for (int j=0;j<m;j++){
for (int k1=lb;k1<=guy[i].first.first;k1++){
dp2[j+1][k1] = 0;
}
for (int j1=j;j1>=0;j1--){
for (int k1=lb;k1<=guy[i].first.first;k1++){
if (dp2[j1][k1]==0) continue;
dp2[j1+1][k1-guy[i].second[j]] = 1;
}
}
}
ll mx = m*k;
if (i != n-1){
mx = guy[i+1].first.first;
}
for (int k1=lb;k1<=mx;k1++) dp3[k1] = n*m*k*2;
for (int k1=lb;k1<=guy[i].first.first;k1++){
for (int j=0;j<=m;j++){
if (dp2[j][k1]==0) continue;
if (k1==lb && guy[i].first.second > li) continue;
if (k1 < lb || j*k+k1 > mx) continue;
if (i==0){
dp3[j*k+k1] = min(dp3[j*k+k1],m-j);
continue;
}
if (guy[i].first.second > li){
dp3[j*k+k1] = min(dp3[j*k+k1],dp[k1-1]+(m-j));
}
else dp3[j*k+k1] = min(dp3[j*k+k1],dp[k1]+(m-j));
}
}
ll mn = dp3[guy[i].first.first];
for (ll k1=guy[i].first.first;k1<=mx;k1++){
mn = min(mn,dp3[k1]);
dp[k1] = mn;
//cout << i << ' ' << k1 << ' ' << mn << "\n";
}
}
cout << dp[m*k];
}