#include<bits/stdc++.h>
using namespace std ;
#define g0 get<0>
#define g1 get<1>
#define g2 get<2>
const int N = 20 ; // 2e4+5 ;
const int M = 20 ; // 105 ;
const int K = 105 ;
int n , m , k , ans , arr[N][M] , mini[N] , maxi[N] ;
tuple<int,int,vector<int>> v[N] ;
void check(){
int cnt = 0 ;
memset(mini,0,sizeof(mini)) ;
memset(maxi,0,sizeof(maxi)) ;
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<m ; j++){
if(!arr[i][j]) mini[i]+=g2(v[i])[j] , maxi[i]+=g2(v[i])[j] ;
else mini[i]+=0 , maxi[i]+=k , cnt++ ;
}
if(i && (maxi[i-1]>mini[i] || (maxi[i-1]==mini[i] && -g1(v[i-1])<-g1(v[i])))) return ;
}
ans = max(ans,cnt) ;
}
void f(int x , int y){
if(x==n){
check() ;
return ;
}
int a = x , b = y+1 ;
if(b==m) a++ , b=0 ;
arr[x][y]=1 ;
f(a,b) ;
arr[x][y]=0 ;
f(a,b) ;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
cin >> n >> m >> k ;
for(int i=0 ; i<n ; i++){
g1(v[i]) = -i ; g2(v[i]).resize(m) ;
for(int j=0 ; j<m ; j++) cin >> g2(v[i])[j] , g0(v[i])+=g2(v[i])[j] ;
}
sort(v,v+n) ;
f(0,0) ;
cout << n*m-ans << '\n' ;
return 0 ;
}