#include<bits/stdc++.h>

using namespace std;

typedef long long llint;

const int MAXN = 2005;
const int MOD = 1000000007;

llint n, m, k, cnt = 1;
string s[MAXN];
llint p, a1, b1, a2, b2, a, b;
llint r[2][2][200];

void precompute () {
    for (int i=0; i<n; i++) {
        for (int j=0; j<m-1; j++) {
            if (s[i][j] == '#' && s[i][j+1] == '#') a1++;
        }
        if (0 < m-1 && s[i][0] == '#' && s[i][m-1] == '#') b1++;
    }
    for (int i=0; i<n-1; i++) {
        for (int j=0; j<m; j++) {
            if (s[i][j] == '#' && s[i+1][j] == '#') a2++;
        }
    }
    for (int i=0; i<m; i++) {
        if (0 < n-1 && s[0][i] == '#' && s[n-1][i] == '#') b2++;
    }
}

void mul (int x, int y, int z) {
    for (int i=0; i<2; i++) {
        for (int j=0; j<2; j++) {
            llint res = 0;
            for (int h=0; h<2; h++) {
                res = (res + r[i][h][x] * r[h][j][y]) % MOD;
            }
            r[i][j][z] = res;
        }
    }
}

int pot (llint e) {
    if (e == 0) return 0;
    if (e == 1) return 1;
    int t = pot(e / 2);
    cnt++;
    mul(t, t, cnt);
    if (e & 1) {
        cnt++;
        mul(cnt - 1, 1, cnt);
    }
    return cnt;
}

int main () {
    cin >> n >> m >> k;
    if (k == 0) {
        cout << 1;
        return 0;
    }
    for (int i=0; i<n; i++) {
        cin >> s[i];
        for (int j=0; j<m; j++) p += (s[i][j] == '#');
    }
    precompute();
    if (b1 > 0 && b2 > 0) {
        cout << 1;
        return 0;
    } else if (b1 == 0 && b2 == 0) {
        k--;
        llint res = 1;
        while (k > 0) {
            if (k & 1) res = (res * p) % MOD;
            p = p * p % MOD;
            k /= 2;
        }
        cout << res;
        return 0;
    } else {
        if (b2 == 0) {
            a = a1; b = b1;
        } else {
            a = a2; b = b2;
        }
    }
    r[0][0][0] = r[1][1][0] = 1;
    r[0][0][1] = p; r[0][1][1] = MOD - a; r[1][1][1] = b;
    int ind = pot(k-1);
    cout << (r[0][0][ind] + r[0][1][ind]) % MOD;
    return 0;
}
