#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1010, MOD = (int)(1e9 + 7);
int n,m,tms,gra[N][N],num,rc,cc;
char s[N];
typedef long long ll;
ll power(ll a,int b) {
  ll ret = 1;
  while (b) {
    if (b&1) ret = 1ll * ret * a % MOD;
    a = 1ll * a * a % MOD;
    b >>= 1;
  }
  return ret;
}
struct matrix {
  int mat[5][5];
  int n,m;
  matrix(int n=0,int m=0): n(n), m(m) {
    memset(mat,0,sizeof mat);
  }
  matrix operator * (const matrix& x) const {
    assert(m == x.n);
    matrix ret = matrix(n,x.m);
    for (int k = 1 ; k <= m ; ++ k)
      for (int i = 1 ; i <= n ; ++ i)
	for (int j = 1 ; j <= x.m ; ++ j)
	  (ret.mat[i][j] += 1ll * mat[i][k] * x.mat[k][j] % MOD) %= MOD;
    return ret;
  }
};
matrix power(matrix a,int b) {
  assert(a.n == a.m);
  matrix ret = matrix(a.n,a.m);
  for (int i = 1 ; i <= a.n ; ++ i)
    ret.mat[i][i] = 1;
  while (b) {
    if (b&1) ret = ret * a;
    a = a * a;
    b >>= 1;
  }
  return ret;
}
signed main() {
  scanf("%lld%lld%lld",&n,&m,&tms);
  if (!tms) return puts("1"), 0;
  for (int i = 1 ; i <= n ; ++ i) {
    scanf("%s",s+1);
    for (int j = 1 ; j <= m ; ++ j)
      gra[i][j] = (s[j] == '#'), num += (s[j] == '#');
  }
  for (int i = 1 ; i <= n ; ++ i)
    rc += gra[i][1] & gra[i][m];
  for (int i = 1 ; i <= m ; ++ i)
    cc += gra[1][i] & gra[n][i];
  matrix a = matrix(2,2), b = matrix(2,2);
  a.mat[1][1] = 1;
  a.mat[1][2] = 1;
  b.mat[1][1] = num;
  if (rc && cc) return puts("1"), 0;
  if (rc) {
    b.mat[2][2] = rc;
    for (int i = 1 ; i <= n ; ++ i)
      for (int j = 1 ; j <= m ; ++ j)
	if (gra[i][j] && gra[i][j-1])
	  -- b.mat[2][1];
  } else if (cc) {
    b.mat[2][2] = cc;
    for (int j = 1 ; j <= m ; ++ j)
      for (int i = 1 ; i <= n ; ++ i)
	if (gra[i][j] && gra[i-1][j])
	  -- b.mat[2][1];
  } else
    return printf("%lld\n",power(num,tms-1)), 0;
  a = a * power(b,tms-1);
  printf("%lld\n",(a.mat[1][1] % MOD + MOD) % MOD);
  return 0;
}
