#include <cstdio>
#define LL long long
const int maxn = 1005;
const LL mo = 1e9 + 7;
using namespace std;
int n, m, cnt[2], lnk[2], V;
char str[maxn][maxn]; LL k;
LL pow(LL x, LL t){
	LL res = 1; x %= mo;
	while (t > 0){
		if (t & 1) res = res * x % mo;
		x = x * x % mo;
		t >>= 1;
	}
	return res;
}
int main(){
	scanf("%d%d%lld", &n, &m, &k);
	for (int i = 1; i <= n; i++) scanf("%s", str[i] + 1);
	for (int i = 1; i <= n; i++)
		if (str[i][1] == '#' && str[i][m] == '#') cnt[0]++;
	for (int j = 1; j <= m; j++)
		if (str[1][j] == '#' && str[n][j] == '#') cnt[1]++;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++){
			V += (str[i][j] == '#'); 
			if (str[i][j] == '#' && str[i][j + 1] == '#') lnk[0]++;
			if (str[i][j] == '#' && str[i + 1][j] == '#') lnk[1]++;
		}
	if (cnt[0] == 0 && cnt[1] == 0){
		printf("%lld\n", pow(V, k - 1));
		return 0;
	}
	if (cnt[0] > 0 && cnt[1] > 0){
		puts("1"); return 0;
	}
	if (cnt[0] > 0){
		LL ans = pow(V, k - 1) - 1ll * lnk[0] * (pow(V, k - 1) - pow(cnt[0], k - 1)) % mo * pow(V - cnt[0], mo - 2) % mo;
		printf("%lld\n", (ans + mo) % mo);
	}
	if (cnt[1] > 0){
		LL ans = pow(V, k - 1) - 1ll * lnk[1] * (pow(V, k - 1) - pow(cnt[1], k - 1)) % mo * pow(V - cnt[1], mo - 2) % mo;
		printf("%lld\n", (ans + mo) % mo);
	}
	return 0;
}