#include<iostream>
//#include<>
using namespace std;
int bkg=0;
int ct=0;
int k=0;
int n=0,m=0;
int map[50][50]={0};
void dfs(int a,int b,int bmax)
{
if(a>=n||a<0||b>=m||b<0 )
{
if(a==n-1&&b==m && bkg ==k)//是否终点 且 k==2
{
ct=(ct+1)%1000000007; // 走法+1
}
return;
}
//越界了么?
//判断能不能take
if(bmax<map[a][b] && bkg<k)//take
{
//map[a][b];
bkg++; //k++
dfs(a,b+1,map[a][b]); //右走
dfs(a+1,b,map[a][b]); //下走
//饱和了
// cout<<map[a][b]<<endl;
// cv++;
bkg--;
}
dfs(a,b+1,bmax);
dfs(a+1,b,bmax);
}
int main()
{
cin>>n>>m>>k;//n=a m=b
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>map[i][j];
}//构造地图
dfs(0,0,0);
cout<<ct;
return 0;
}