#include <bits/stdc++.h>
using namespace std;
const int N = 21;
int n, m;
long long mat[N][N];
long long k;
map<long long, int> a[N][N], b[N][N];
void brute1(int i, int j, long long x, int tam) {
  x ^= mat[i][j];
  if (!tam) {
    a[i][j][x]++;
    return;
  }
  if (i + 1 < n) brute1(i + 1, j, x, tam - 1);
  if (j + 1 < m) brute1(i, j + 1, x, tam - 1);
}
void brute2(int i, int j, long long x, int tam) {
  x ^= mat[i][j];
  if (!tam) {
    b[i][j][x]++;
    return;
  }
  if (i - 1 >= 0) brute2(i - 1, j, x, tam - 1);
  if (j - 1 >= 0) brute2(i, j - 1, x, tam - 1);
}
int main() {
  scanf("%d %d %lld", &n, &m, &k);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) scanf("%lld", &mat[i][j]);
  int tot = n - 1 + m - 1;
  int lef = tot / 2, rig = tot - lef;
  brute1(0, 0, 0, lef);
  brute2(n - 1, m - 1, 0, rig);
  long long ans = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      for (auto x : a[i][j]) {
        ans += 1LL * b[i][j][x.first ^ mat[i][j] ^ k] * x.second;
      }
    }
  printf("%lld\n", ans);
}
