#include <bits/stdc++.h>
using namespace std;
#define maxn 1010
#define ll long long
#define db double
#define vi vector<int>
#define pb push_back
#define mod 1000000007
#define fi first
#define se second
ll ksm(ll a, ll b) {
   if (!b) return 1;
   ll ns = ksm(a, b >> 1);
   ns = ns * ns % mod;
   if (b & 1) ns = ns * a % mod;
   return ns;
}
// head
int h, w;
ll k;
int s[maxn][maxn];
char inp[maxn];
struct mat {
	ll a[2][2];
	mat() {a[0][0] = a[1][1] = 1, a[1][0] = a[0][1] = 0;}
	mat operator * (mat y) {
		mat ans;
		for (int i = 0; i < 2; i++)
			for (int j = 0; j < 2; j++) {
				ans.a[i][j] = 0;
				for (int k = 0; k < 2; k++)
					ans.a[i][j] += a[i][k] * y.a[k][j], 
					ans.a[i][j] %= mod;
			}
		return ans;
	}
};
mat ksm(mat a, ll b) {
	if (!b) return mat();
	mat ns = ksm(a, b >> 1);
	ns = ns * ns;
	if (b & 1) ns = ns * a;
	return ns;
}
int main() {
	scanf("%d%d%lld", &h, &w, &k);
	int cnt = 0;
	for (int i = 0; i < h; i++) {
		scanf("%s", inp);
		for (int j = 0; j < w; j++)
			if (inp[j] == '#') s[i][j] = 1, cnt++;
			else s[i][j] = 0;
	}
	int fl[2] = {0, 0};
	for (int i = 0; i < h; i++)
		if (s[i][0] && s[i][w - 1]) fl[0]++;
	for (int i = 0; i < w; i++)
		if (s[0][i] && s[h - 1][i]) fl[1]++;
	if (fl[0] && fl[1]) cout << 1 << endl;
	else if (fl[0] == 0 && fl[1] == 0) 
		cout << ksm(cnt, k - 1) << endl;	
	else {
		int tot = 0, mn;
		if (fl[0]) {
			mn = fl[0];
			for (int i = 0; i < h; i++)
				for (int j = 0; j < w; j++)
					if (s[i][j] && s[i][j + 1]) tot++;
		}
		else {
			mn = fl[1];
			for (int i = 0; i < h; i++)
				for (int j = 0; j < w; j++)
					if (s[i][j] && s[i + 1][j]) tot++;
		}
		mat fr;
		fr.a[0][0] = fr.a[0][1] = 1, 
		fr.a[1][0] = fr.a[1][1] = 0;
		mat bk;
		bk.a[0][0] = cnt, bk.a[1][0] = -tot;
		bk.a[0][1] = 0, bk.a[1][1] = mn;
		bk = ksm(bk, k - 1);
		fr = fr * bk;
		ll res = fr.a[0][0];
		res %= mod;
		if (res < 0) res += mod;
		cout << res << endl;
	}
	return 0;
}
