#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define db double
#define pint pair<int,int>
#define mk make_pair
#define pb push_back
#define eb emplace_back
#define ins insert
#define fi first
#define se second
#define Rep(x,y,z) for(int x=y;x<=z;x++)
#define Red(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
const int Mod=1e9+7,MAXN=1e3+5;
char buf[1<<12],*pp1=buf,*pp2=buf,nc;int ny;
//inline char gc() {return pp1==pp2&&(pp2=(pp1=buf)+fread(buf,1,1<<12,stdin),pp1==pp2)?EOF:*pp1++;}
inline char gc(){return getchar();}
inline ll read(){
	ll x=0;for(ny=1;nc=gc(),(nc<48||nc>57)&&nc!=EOF;)if(nc==45)ny=-1;if(nc<0)return nc;
	for(x=nc-48;nc=gc(),47<nc&&nc<58&&nc!=EOF;x=(x<<3)+(x<<1)+(nc^48));return x*ny;
}
struct Mat{
	int a[2][2];
	inline int*operator[](int x){return a[x];}
	inline Mat(){memset(a,0,sizeof(a));}
	inline friend Mat operator*(Mat a,Mat b){
		Mat c;
		Rep(i,0,1)Rep(j,0,1)Rep(k,0,1)c[i][j]=(c[i][j]+1ll*a[i][k]*b[k][j])%Mod;
		return c;
	}
}coef;
int h,w,a,b,c,d;char s[MAXN][MAXN];ll k;
inline int Fp(int x,ll k){int ans=1;for(;k;k>>=1,x=1ll*x*x%Mod)if(k&1)ans=1ll*ans*x%Mod;return ans;}
inline Mat Fp(Mat x,ll k){Mat ans;for(ans[0][0]=ans[1][1]=1;k;k>>=1,x=x*x)if(k&1)ans=ans*x;return ans;}
int main(){
//	freopen("std.in","r",stdin);
//	freopen("std.out","w",stdout);
	h=read(),w=read(),k=read();
	Rep(i,1,h){
		scanf("%s",s[i]+1);
		Rep(j,1,w)if(s[i][j]=='#')a++;
	}Rep(i,1,w)if(s[1][i]=='#')c+=s[1][i]==s[h][i];Rep(i,1,h)if(s[i][1]=='#')d+=s[i][1]==s[i][w];
	if(c&&d)puts("1");else if(!c&&!d)cout<<Fp(a,k-1);else{
		if(c)Rep(i,1,h)Rep(j,1,w){if(s[i][j]=='#'&&s[i+1][j]=='#')b++;}
		else Rep(i,1,h)Rep(j,1,w){if(s[i][j]=='#'&&s[i][j+1]=='#')b++;}
		coef[0][0]=a,coef[0][1]=0,coef[1][0]=b,coef[1][1]=c+d,coef=Fp(coef,k-1);
		cout<<(coef[0][0]-coef[1][0]+Mod)%Mod<<'\n';
	}
	return 0;
}


