#include<cstdio>
#include<cctype>
#include<cstring>
const int maxn=1010,mod=1000000007;
int n,m;
long long k;
char s[maxn][maxn];
int p,q,r;
bool ta,tb;
struct Matrix {
	int a[3][3];
	void cls() {
		memset(a,0,sizeof a);
	}
}c;
Matrix operator * (const Matrix &a,const Matrix &b) {
	c.cls();
	for(register int i=0;i<3;++i)for(register int k=0;k<3;++k)for(register int j=0;a.a[i][k]&&j<3;++j)
	b.a[k][j]?c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%mod:0;
	return c;
}
Matrix f,x;
int pw(register int x,register long long y) {
	register int s=1;
	for(;y;y>>=1,x=1ll*x*x%mod)y&1?s=1ll*s*x%mod:0;
	return s;
}
void pw(register long long y) {
	for(;y;y>>=1,x=x*x)if(y&1)f=f*x;
}
int main() {
	scanf("%d%d%lld",&n,&m,&k);
	for(register int i=0;i<n;++i)scanf("%s",s[i]);
	if(!k) return puts("1"),0;
	--k;
	for(register int i=0;i<n;++i)for(register int j=0;j<m;++j)p+=s[i][j]=='#';
	for(register int i=0;i<n;++i)if(s[i][0]=='#'&&s[i][m-1]=='#') ta=1,++q;
	for(register int i=0;i<m;++i)if(s[0][i]=='#'&&s[n-1][i]=='#') tb=1,++q;
	if(ta&&tb) return puts("1"),0;
	if(!ta&&!tb) return printf("%d\n",pw(p,k)),0;
	f.a[0][0]=f.a[0][2]=1;
	if(ta) for(register int i=0;i<n;++i)for(register int j=1;j<m;++j)r+=s[i][j]=='#'&&s[i][j-1]=='#';
	else for(register int i=1;i<n;++i)for(register int j=0;j<m;++j)r+=s[i][j]=='#'&&s[i-1][j]=='#';
	x.a[0][0]=p,x.a[1][1]=p,x.a[2][1]=r,x.a[2][2]=q;
	pw(k);
	printf("%d\n",(f.a[0][0]-f.a[0][1]+mod)%mod);
	return 0;
}