#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
#define int long long
bool comp(pair<vector<int>, int>& a, pair<vector<int>, int>& b) {
int sa = 0, sb = 0;
for (int i : a.first) sa += i;
for (int i : b.first) sb += i;
if (sa == sb) return a.second > b.second;
return sa < sb;
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int N, M, K, a, ans = 0; cin >> N >> M >> K;
if (N == 2) {
int s1 = 0, s2 = 0, swapped = 0;
vector<int> A1, A2;
for (int i = 0; i < M; i++) {
cin >> a;
A1.push_back(a);
s1 += a;
}
for (int i = 0; i < M; i++) {
cin >> a;
A2.push_back(a);
s2 += a;
}
if (s1 > s2) {
swap(A1, A2);
swapped = 1;
}
sort(A1.begin(), A1.end(), greater<int>());
sort(A2.begin(), A2.end());
for (int i = 0; i <= M; i++) {
for (int j = 0; j <= M; j++) {
pair<int, int> r1 = { 0, i * K }, r2 = { 0, j * K };
for (int k = i; k < M; k++) r1.first += A1[k], r1.second += A1[k];
for (int k = j; k < M; k++) r2.first += A2[k], r2.second += A2[k];
if (r1.second < r2.first || (r1.second == r2.first && swapped)) ans = max(ans, i + j);
}
}
cout << N * M - ans << '\n';
}
vector<pair<vector<int>, int>> A(N, pair<vector<int>, int>(vector<int>(M, 0), 0));
vector<int> sums;
for (int i = 0; i < N; i++) {
A[i].second = i;
int csum = 0;
for (int j = 0; j < M; j++) {
cin >> a;
A[i].first[j] = a;
csum += a;
}
sums.push_back(csum);
}
sort(A.begin(), A.end(), comp);
sort(sums.begin(), sums.end());
for (int i = 0; i < M; i++)
ans += A[0].first[i] + (1 - A.back().first[i]);
for (int i = 1; i < N; i++) {
int s1 = 0, s2 = 0;
for (int j = 0; j < M; j++) s1 += 1 - A[i - 1].first[j], s2 += A[i].first[j];
ans += min(sums[i] - sums[i - 1] - (A[i].second > A[i - 1].second), s1 + s2);
}
cout << N * M - ans << '\n';
}