#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const char E = '\n';
int n, m;
long long k;
long long a[30][30] = {0};
int half;
long long ans = 0;
map<long long, int> kl[30][30];
void left_up(int x, int y, long long val, int cnt) {
  if (cnt == half) {
    kl[x][y][(val ^ a[x][y])]++;
    return;
  }
  if (x + 1 <= n) left_up(x + 1, y, (val ^ a[x][y]), cnt + 1);
  if (y + 1 <= m) left_up(x, y + 1, (val ^ a[x][y]), cnt + 1);
}
void right_down(int x, int y, long long val, int cnt) {
  if (cnt == m + n - 2 - half) {
    if (kl[x][y].count(k ^ val)) ans += kl[x][y][(k ^ val)];
    return;
  }
  if (x > 1) {
    right_down(x - 1, y, (val ^ a[x][y]), cnt + 1);
  }
  if (y > 1) {
    right_down(x, y - 1, (val ^ a[x][y]), cnt + 1);
  }
}
int main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> a[i][j];
    }
  }
  half = (m + n - 2) / 2;
  left_up(1, 1, 0, 0);
  right_down(n, m, 0, 0);
  cout << ans << E;
  return 0;
}
