package main
import (
"fmt"
"io"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextUint64 := func() uint64 {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
var v uint64
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
v = v*10 + uint64(data[p]-'0')
p++
}
return v
}
n := int(nextUint64())
m := int(nextUint64())
k := nextUint64()
a := make([][]uint64, n)
for i := 0; i < n; i++ {
a[i] = make([]uint64, m)
for j := 0; j < m; j++ {
a[i][j] = nextUint64()
}
}
totalMoves := n + m - 2
leftMoves := totalMoves / 2
rightMoves := totalMoves - leftMoves
mp := make([][]map[uint64]uint64, n)
for i := 0; i < n; i++ {
mp[i] = make([]map[uint64]uint64, m)
}
var dfs1 func(int, int, int, uint64)
dfs1 = func(x, y, steps int, xr uint64) {
xr ^= a[x][y]
if steps == leftMoves {
if mp[x][y] == nil {
mp[x][y] = make(map[uint64]uint64)
}
mp[x][y][xr]++
return
}
if x+1 < n {
dfs1(x+1, y, steps+1, xr)
}
if y+1 < m {
dfs1(x, y+1, steps+1, xr)
}
}
var ans uint64
var dfs2 func(int, int, int, uint64)
dfs2 = func(x, y, steps int, xr uint64) {
xr ^= a[x][y]
if steps == rightMoves {
if mp[x][y] != nil {
ans += mp[x][y][k^xr^a[x][y]]
}
return
}
if x > 0 {
dfs2(x-1, y, steps+1, xr)
}
if y > 0 {
dfs2(x, y-1, steps+1, xr)
}
}
dfs1(0, 0, 0, 0)
dfs2(n-1, m-1, 0, 0)
fmt.Println(ans)
}