#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#define LL long long
using namespace std;
const LL Maxn = 1010;
const LL Mod = 1e9+7;
struct matrix {
	LL a[2][2], l1, l2;
	void clear() { memset(a, 0, sizeof(a)); }
}x, z;
char s[Maxn][Maxn];
LL n, m, K;
LL qpow(LL x, LL k) {
	LL ret = 1;
	while(k){
		if(k&1) ret = ret*x%Mod;
		x = x*x%Mod;
		k >>= 1;
	}
	return ret;
}
matrix ttimes(matrix x, matrix y) {
	matrix ret;
	ret.l1 = x.l1; ret.l2 = y.l2;
	ret.clear();
	for(LL i = 0; i < ret.l1; i++){
		for(LL j = 0; j < ret.l2; j++){
			for(LL k = 0; k < x.l2; k++) ret.a[i][j] = (ret.a[i][j]+x.a[i][k]*y.a[k][j])%Mod;
		}
	}
	return ret;
}
int main() {
	LL i, j, k;
	scanf("%lld%lld%lld", &n, &m, &K);
	LL sr = 0, sc = 0, sum = 0;
	for(i = 1; i <= n; i++){
		scanf("%s", s[i]+1);
		for(j = 1; j <= m; j++) sum += s[i][j] == '#';
	}
	for(i = 1; i <= n; i++) if(s[i][1] == '#' && s[i][m] == '#') sr++;
	for(i = 1; i <= m; i++) if(s[1][i] == '#' && s[n][i] == '#') sc++;
	if(sr && sc) printf("1\n");
	else if(!sr && !sc) printf("%lld\n", qpow(sum, K-1));
	else if(sr){
		LL ss = 0;
		for(i = 1; i <= n; i++){
			for(j = 1; j < m; j++) if(s[i][j] == '#' && s[i][j+1] == '#') ss++;
		}
		x.l1 = x.l2 = 2;
		x.a[0][0] = sr; x.a[0][1] = Mod-1; x.a[1][1] = sum;
		z.l1 = z.l2 = 2;
		z.a[0][0] = z.a[1][1] = 1;
		K--;
		while(K){
			if(K&1) z = ttimes(z, x);
			x = ttimes(x, x);
			K >>= 1;
		}
		printf("%lld\n", (z.a[1][1]+ss*z.a[0][1])%Mod);
	} else {
		LL ss = 0;
		for(i = 1; i < n; i++){
			for(j = 1; j <= m; j++) if(s[i][j] == '#' && s[i+1][j] == '#') ss++;
		}
		x.l1 = x.l2 = 2;
		x.a[0][0] = sc; x.a[0][1] = Mod-1; x.a[1][1] = sum;
		z.l1 = z.l2 = 2;
		z.a[0][0] = z.a[1][1] = 1;
		K--;
		while(K){
			if(K&1) z = ttimes(z, x);
			x = ttimes(x, x);
			K >>= 1;
		}
		printf("%lld\n", (z.a[1][1]+ss*z.a[0][1])%Mod);
	}
	return 0;
}