#include <bits/stdc++.h>
using namespace std;
const int Maxn = 13, mod = 1000000007;
int n, m, all, col[Maxn][Maxn], s[Maxn][Maxn];
int ans = 0, num[Maxn];
bool flag[Maxn];
void dfs(int x, int y, int tot) {
  if (tot > all) return;
  if (y > m) ++x, y = 1;
  if (x > n) {
    int cnt = 0, res = 1;
    for (int i = 1; i <= all; i++) cnt += num[i] > 0;
    for (int i = all - tot + 1; i <= all - cnt; i++) res *= i;
    ans = (ans + res) % mod;
    return;
  }
  s[x][y] = s[x - 1][y] | s[x][y - 1];
  if (col[x][y]) {
    int c = col[x][y];
    if (num[c]) {
      if ((s[x][y] & (1 << num[c])) == 0)
        s[x][y] |= (1 << num[c]), dfs(x, y + 1, tot);
    } else {
      for (int i = 1; i <= tot + 1; i++)
        if (!flag[i] && (s[x][y] & (1 << i)) == 0) {
          s[x][y] ^= 1 << i;
          num[c] = i;
          flag[i] = true;
          dfs(x, y + 1, i > tot ? i : tot);
          s[x][y] ^= 1 << i;
          num[c] = 0;
          flag[i] = false;
        }
    }
  } else {
    for (int i = 1; i <= tot + 1; i++)
      if ((s[x][y] & (1 << i)) == 0) {
        s[x][y] ^= 1 << i;
        dfs(x, y + 1, i > tot ? i : tot);
        s[x][y] ^= 1 << i;
      }
  }
}
int main() {
  cin >> n >> m >> all;
  if (n + m - 1)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= m; j++) cin >> col[i][j];
  dfs(1, 1, 0);
  cout << ans << endl;
  return 0;
}
