#include <bits/stdc++.h>
 
using namespace std;
 
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
 
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
 
using ll = long long;
/*
    g++ -std=c++11 test.cpp -o test.out && ./test.out
*/


int n, m, need;

bool ok(vector<string> &grid) {
    int cnt=0;
    for(int i=0; i<n; i++) {
       for(int j=0; j<m; j++) {
           if(grid[i][j]=='#') {
               cnt++;
           }
       }
    }
    return cnt==need;
}

void solve() {
    cin >> n >> m >> need;
    vector<string> matrix(n);
    for (int i=0; i<n; i++) {
        cin >> matrix[i];
    }

    ll ans=0;
    for (int i=0; i<(1<<n); i++) {
        for (int j=0; j<(1<<m); j++) {
            vector<string> grid=matrix;
            for (int k=0; k<n; k++) {
                if (i&(1<<k)) {
                    for (int jj=0; jj<m; jj++) {
                        grid[k][jj]='!';
                    }
                }
            }
            for (int k=0; k<m; k++) {
                if (j&(1<<k)) {
                    for (int ii=0; ii<n; ii++) {
                        grid[ii][k]='!';
                    }
                }
            }
            if (ok(grid)) {
                ans++;
            }
        }
    }    
    cout << ans << endl;
}

// const int MOD = 1e9 + 7;

// using ll = long long;
// int modulo(ll x,int N){
//     return (x % N + N) %N;
// }

// void solve(){
//     ll n; cin >> n;
//     ll k; cin >> k;
//     vector<ll> a(n);
//     for(int i = 0; i < n; i++){
//         cin >> a[i];
//     }

//     sort(a.begin(), a.end());

//     ll result = 1;

//     if(a[n - 1] == 0 && (k & 1)){
//         cout << modulo(0, MOD) << endl;
//         return;
//     }

//     if(a[n - 1] <= 0 && (k & 1)){
//         for(int i = n - 1; i >= n - k; i--){
//             result = modulo(result * a[i], MOD);
//         }
//         cout << result << endl;
//         return;
//     }

//     int i = 0;
//     int j = n - 1;
//     if(k & 1){
//         result = modulo(result * a[j], MOD);
//         j--;
//         k--;
//     }

//     k >>= 1;
//     for(int idx = 0; idx < k; idx++){
//         long long lp = modulo(a[i] * a[i + 1], MOD);
//         long long rp = modulo(a[j] * a[j - 1], MOD);
//         if(lp > rp){
//             result = modulo(result * lp, MOD);
//             i += 2;
//         } else {
//             result = modulo(result * rp, MOD);
//             j -= 2;
//         }
//     }

//     cout << result << endl;
// }

int main()
{    
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    solve();
    
    return 0;
}

Measured memory_bytes: 3656