
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
int n,m,k;
int vis[52][52];
int dx[2]={0,1};
int dy[2]={1,0};
ll dp[52][52][15][15];///dfs几个变量就几维数组,
///n,m,k,ci的值都较小,所以用dfs
///大了用动归,bfs等
ll dfs(int x,int y,int c,int ma)
{if(x==n&&y==m&&c==k)///满足条件 {return 1; }if(c>k) return 0; ///记忆化的优势--剪枝 if(dp[x][y][c][ma+1]!=-1) return dp[x][y][c][ma+1];///加1是为了初始值为-1,///因为有价值为0的 int w=0,e=0;for(int i=0;i<2;i++){int tx=x+dx[i];int ty=y+dy[i];if(tx>=1&&tx<=n&&ty>=1&&ty<=m){if(vis[tx][ty]>ma){if(!i) w=(dfs(tx,ty,c+1,vis[tx][ty])+dfs(tx,ty,c,ma))%1000000007;else e=(dfs(tx,ty,c+1,vis[tx][ty])+dfs(tx,ty,c,ma))%1000000007;}else {if(!i)w=dfs(tx,ty,c,ma)%1000000007;else e=dfs(tx,ty,c,ma)%1000000007;}}}dp[x][y][c][ma+1]=(w+e)%1000000007; return dp[x][y][c][ma+1];
}
int main()
{cin>>n>>m>>k;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>vis[i][j];}}ll s=0;memset(dp,-1,sizeof(dp));dfs(1,1,0,-1);s+=dp[1][1][0][0]%1000000007; ///第一个没拿 memset(dp,-1,sizeof(dp));dfs(1,1,1,vis[1][1]); s+=dp[1][1][1][vis[1][1]+1]%1000000007;///第一个拿了cout<<s%1000000007;return 0;
}