#include <bits/stdc++.h>   using namespace std;   bool SR(int &x) { return scanf( %d , &x) == 1; }   bool SR(long long &x) { return scanf( %lld , &x) == 1; }   bool SR(double &x) { return scanf( %lf , &x) == 1; }   bool SR(char *s) { return scanf( %s , s) == 1; }   bool RI() { return true; }   template <typename I, typename... T>   bool RI(I &x, T &...tail) {     return SR(x) && RI(tail...);   }   void SP(const int x) { printf( %d , x); }   void SP(const long long x) { printf( %lld , x); }   void SP(const double x) { printf( %.16lf , x); }   void SP(const char *s) { printf( %s , s); }   void PL() { puts(  ); }   template <typename I, typename... T>   void PL(const I x, const T... tail) {     SP(x);     if (sizeof...(tail)) putchar(   );     PL(tail...);   }   const int maxn = 1e2 + 2;   vector<bool> a[maxn];   int n, m, k;   void read() {     RI(n, m, k);     for (int i = 0; i < int(n); i++) a[i].resize(m);     for (int i = 0; i < int(n); i++)       for (int j = 0; j < int(m); j++) {         int x;         RI(x);         a[i][j] = (x == 1);       }   }   void build() {}   int doo(const vector<bool> &v) {     int ans = 0;     for (int i = 0; i < int(n); i++) {       int c[2] = {0, 0};       for (int j = 0; j < int(m); j++) c[v[j] ^ a[i][j]]++;       ans += min(c[0], c[1]);     }     return ans;   }   void sol() {     int ans = k + 1;     if (n > 10) {       for (int i = 0; i < int(n); i++) ans = min(ans, doo(a[i]));     } else {       vector<bool> c[maxn];       for (int i = 0; i < int(m); i++) c[i].resize(n);       for (int i = 0; i < int(n); i++)         for (int j = 0; j < int(m); j++) c[j][i] = a[i][j];       swap(n, m);       for (int i = 0; i < int(n); i++) a[i] = c[i];       vector<bool> v(m);       for (int i = 0; i < int((1 << m)); i++) {         for (int j = 0; j < int(m); j++) v[j] = ((i >> j) & 1);         ans = min(ans, doo(v));       }     }     if (ans <= k)       PL(ans);     else       PL(-1);   }   int main() {     read();     build();     sol();     return 0;   }   