package main
import (
"bufio"
"fmt"
"os"
)
var (
n, m int
k uint64
a [][]uint64
half int
ans uint64
pref [][]map[uint64]uint64
)
func dfs1(i, j, d int, x uint64) {
if d == half {
if pref[i][j] == nil {
pref[i][j] = make(map[uint64]uint64)
}
pref[i][j][x]++
return
}
if i+1 < n {
dfs1(i+1, j, d+1, x^a[i+1][j])
}
if j+1 < m {
dfs1(i, j+1, d+1, x^a[i][j+1])
}
}
func dfs2(i, j, d int, xr uint64) {
totalSteps := (n-1) + (m-1)
if d == totalSteps-half {
if pref[i][j] != nil {
want := k ^ xr
if cnt, ok := pref[i][j][want]; ok {
ans += cnt
}
}
return
}
if i > 0 {
dfs2(i-1, j, d+1, xr^a[i][j])
}
if j > 0 {
dfs2(i, j-1, d+1, xr^a[i][j])
}
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
if _, err := fmt.Fscan(in, &n, &m, &k); err != nil {
return
}
a = make([][]uint64, n)
for i := 0; i < n; i++ {
a[i] = make([]uint64, m)
for j := 0; j < m; j++ {
fmt.Fscan(in, &a[i][j])
}
}
half = ((n - 1) + (m - 1)) / 2
pref = make([][]map[uint64]uint64, n)
for i := 0; i < n; i++ {
pref[i] = make([]map[uint64]uint64, m)
}
dfs1(0, 0, 0, a[0][0])
dfs2(n-1, m-1, 0, 0)
fmt.Fprintln(out, ans)
}