#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define per(i, a, b) for(int i = a; i >= b; i--)
typedef long long LL;
const int maxn = 1005;
const LL mod = 1e9 + 7;

int n, m;
LL p, cnt, a, b, c, d;
char s[maxn][maxn];
struct Mat {
	int n, m;
	LL a[2][2];
	void clear() { n = m = 0, memset(a, 0, sizeof(a)); }
} A, B;

void mul(Mat &a, Mat &b) {
	Mat ans;
	ans.clear();
	ans.n = a.n, ans.m = b.m;
	rep(i, 0, ans.n)
	    rep(j, 0, ans.m)
	        rep(k, 0, a.m)
	            ans.a[i][j] = (ans.a[i][j] + a.a[i][k]%mod*b.a[k][j]%mod)%mod;
	a = ans;
}

int main() {
	cin>>n>>m>>p;
	rep(i, 1, n)
	    rep(j, 1, m)
	        cin>>s[i][j];
	rep(i, 1, n)
	    rep(j, 1, m) {
	        if(s[i][j] == '#') cnt++;
	        if(s[i][j] == s[i][j - 1] && s[i][j] == '#') c++;
	        if(s[i][j] == s[i - 1][j] && s[i][j] == '#') d++;
	    }
	rep(i, 1, m)
	    if(s[1][i] == s[n][i] && s[1][i] == '#') b++;
	rep(i, 1, n)
	    if(s[i][1] == s[i][m] && s[i][1] == '#') a++;
	if(a && b) {
		cout<<1<<endl;
		return 0;
	}
	p--;
	if(!a && !b) {
		LL res = 1;
		while(p) {
			if(p&1) res = res*cnt%mod;
			p /= 2;
			cnt = cnt*cnt%mod;
		}
		cout<<res<<endl;
		return 0;
	}
	if(!a) swap(a, b), swap(c, d);
	A.clear();
	B.clear();
	A.n = 0, A.m = B.n = B.m = 1;
	A.a[0][0] = 1;
	B.a[0][0] = cnt;
	B.a[0][1] = c;
	B.a[1][1] = a;
	while(p) {
		if(p&(1ll)) mul(A, B);
		p = p>>1ll;
		mul(B, B);
	}
	cout<<(A.a[0][0] - A.a[0][1] + mod)%mod<<endl;
}