#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define INF 0x3f3f3f3f
#define endl "\n"
typedef unsigned long long ULL;
typedef pair<int,int> PII;
typedef long long LL;
const int N = 53,MOD = 1e9+7;
int n,m,k;
int g[N][N],dp[N][N][14][14];
int dfs(int x, int y, int cnt, int mx){
if(dp[x][y][cnt][mx] != -1) return dp[x][y][cnt][mx];//已经遍历过直接返回
if(x > n || y > m || cnt > k) {//越界直接返回
dp[x][y][cnt][mx] = 0;
return 0;
}
if(x == n && y == m){ //走到终点
if(cnt == k || (g[x][y] > mx && cnt + 1 == k)) dp[x][y][cnt][mx] = 1;
else dp[x][y][cnt][mx] = 0;
return dp[x][y][cnt][mx];
}
int ret = 0;
if(dp[x][y+1][cnt][mx] == -1) dp[x][y+1][cnt][mx] = dfs(x, y + 1, cnt, mx);//不选择当前宝物,向右走
if(dp[x+1][y][cnt][mx] == -1) dp[x+1][y][cnt][mx] = dfs(x + 1, y, cnt, mx);//不选择当前宝物,向下走
ret = (ret + (dp[x][y+1][cnt][mx] + dp[x+1][y][cnt][mx]) % MOD) % MOD;//不选择当前宝物的方案数
if(g[x][y] > mx && cnt != k){//可以选择当前宝物
if(dp[x][y+1][cnt+1][g[x][y]] == -1) dp[x][y+1][cnt+1][g[x][y]] = dfs(x, y + 1, cnt+1, g[x][y]);//选择宝物,向右走
if(dp[x+1][y][cnt+1][g[x][y]] == -1) dp[x+1][y][cnt+1][g[x][y]] = dfs(x + 1, y, cnt+1, g[x][y]);//选择宝物,向下走
ret = (ret + (dp[x][y+1][cnt+1][g[x][y]] + dp[x+1][y][cnt+1][g[x][y]]) % MOD) % MOD;//选择宝物+不选择宝物总计方案数
}
//当前坐标x,y,选择cnt件宝物,最大值为mx的总方案数
return dp[x][y][cnt][mx] = ret;
}
void solve(){
while(cin >> n >> m >> k){
memset(dp,-1,sizeof dp);
for(int i = 1;i <= n;++i) for(int j = 1;j <= m;++j) cin >> g[i][j],++g[i][j];//每件宝物价值+1,防止mx初始-1越界
cout << dfs(1,1,0,0) << endl;
}
}
int main(){
#ifdef LOCAL
freopen(".w/ac.in","r",stdin);
freopen(".w/ac.out","w",stdout);
#endif
IOS;
int TT = 1;
// cin >> TT;
while(TT--) solve();
return 0;
}