#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int md=1000000007;
struct node
{
	int a[2][2];
}f,g;
int n,m,i,j,x,y,num,w;
long long K;
char s[1005][1005];
int pw(int a,long long b)
{
	int rtn=1;
	while(b)
	{
		if(b&1)
			rtn=1ll*rtn*a%md;
		a=1ll*a*a%md;
		b>>=1;
	}
	return rtn;
}
void mult(node &a,node &b)
{
	node c;
	for(int i=0;i<2;++i)
		for(int j=0;j<2;++j)
			c.a[i][j]=0;
	for(int i=0;i<2;++i)
		for(int j=0;j<2;++j)
			for(int k=0;k<2;++k)
				c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%md;
	for(int i=0;i<2;++i)
		for(int j=0;j<2;++j)
			a.a[i][j]=c.a[i][j];
}
int main()
{
	scanf("%d%d%lld",&n,&m,&K);
	if(K<=1)
	{
		printf("1");
		return 0;
	}
	for(i=1;i<=n;++i)
	{
		scanf("%s",s[i]+1);
		for(j=1;j<=m;++j)
			if(s[i][j]=='#')
				++num;
	}
	x=y=0;
	for(i=1;i<=n;++i)
		if(s[i][1]=='#'&&s[i][m]=='#')
			++x;
	for(i=1;i<=m;++i)
		if(s[1][i]=='#'&&s[n][i]=='#')
			++y;
	if(x&&y)
	{
		printf("1");
		return 0;
	}
	if(!x&&!y)
	{
		printf("%d",pw(num,K-1));
		return 0;
	}
	if(x)
	{
		for(i=1;i<=n;++i)
			for(j=1;j<m;++j)
				if(s[i][j]=='#'&&s[i][j+1]=='#')
					++w;
	}
	else
	{
		for(i=1;i<=m;++i)
			for(j=1;j<n;++j)
				if(s[j][i]=='#'&&s[j+1][i]=='#')
					++w;
		x=y;
	}
	g.a[0][0]=num,g.a[0][1]=w,g.a[1][0]=0,g.a[1][1]=x;
	f.a[0][0]=num,f.a[0][1]=w;
	K-=2;
	while(K)
	{
		if(K&1)
			mult(f,g);
		mult(g,g);
		K>>=1;
	}
	printf("%d",(f.a[0][0]-f.a[0][1]+md)%md);
	return 0;
}