#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
const int mod = 1e9+7;
int n,m,a[maxn][maxn],cnt,UD,LR,clr,cud;
long long k;
char s[maxn];
int Pow(int a,long long b){int s=1;for(;b;b>>=1,a=1ll*a*a%mod) b&1&&(s=1ll*s*a%mod);return s;}
struct Mat{
	int s[2][2];
	Mat(){memset(s,0,sizeof s);}
	Mat operator * (const Mat &B)const{
		Mat ret;
		for(int k=0;k<2;k++)
			for(int i=0;i<2;i++) if(s[i][k])
				for(int j=0;j<2;j++) if(B.s[k][j])
					ret.s[i][j]=(ret.s[i][j]+1ll*s[i][k]*B.s[k][j])%mod;
		return ret;
	}
}f,g;
void solve(int a,int b){
	g.s[0][0]=cnt,g.s[0][1]=a,g.s[1][1]=b,f=g;
	for(k-=2;k;k>>=1,g=g*g) if(k&1) f=f*g;
}
int main()
{
	scanf("%d%d%lld",&n,&m,&k);
	if(k<=1) return puts("1"),0;
	for(int i=1;i<=n;i++){
		scanf("%s",s+1);
		for(int j=1;j<=m;j++) a[i][j]=s[j]=='#',cnt+=a[i][j],clr+=a[i][j]&a[i][j-1],cud+=a[i][j]&a[i-1][j];
	}
	for(int i=1;i<=n;i++) LR+=a[i][1]&a[i][m];
	for(int i=1;i<=m;i++) UD+=a[1][i]&a[n][i];
	if(LR&&UD) return puts("1"),0;
	if(!LR&&!UD) return printf("%d\n",Pow(cnt,k-1)),0;
	LR?solve(clr,LR):solve(cud,UD);
	printf("%d\n",(f.s[0][0]-f.s[0][1]+mod)%mod);
}