#include<bits/stdc++.h>
using namespace std;
#define int long long int
#define pll pair<ll,ll>
#define vi vector < int >
#define pii pair<int,int>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(a) (a).begin(),(a).end()
#define s(x) scanf("%d",&x)
#define sll(x) scanf("%lld",&x)
#define pf(x) printf("%d\n",x)
#define pfl(x) printf("%lld\n",x)
#define flash ios_base::sync_with_stdio(false);cin.tie(0)
#define goog(x) cout << "Case #" << x << ": "
#define MAX5 200005
#define MAX6 2000005
#define MLOG 18
#define limit 1e18
#define mod 1000000007   
void __print(int 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


int power(int x, int y, int p){
    int res = 1;
    x = x % p;
    while (y > 0){
        if (y & 1)
            res = (res*x) % p;
        y = y>>1;
        x = (x*x) % p;
    }
    return res;
}

int v[MAX5];

string noOf(int x){
	int r = 0;
	string t = "";
	while(x){
		r = x % 10;
		t += (r + '0');
		x /= 10;
	}
	reverse(all(t));
	return t;
}
int mat[100][100];
void solve(){
    int h, w, k1;
    cin >> h >> w >> k1;
    vector < string > v;
    int tot = 0;
    for(int i = 0; i < h; i++){
        string s;
        cin >> s;
        v.pb(s);
        for(auto it: s){
            if(it == '#') tot++;
        }
    }
    int ans = 0;
    for(int i = 0; i < (1<<h); i++){
        for (int k = 0; k < (1<<w); k++){
            for (int l = 0; l < w; l++){
                if((k&(1<<l))){
                    for(int a = 0; a < h; a++){
                        mat[a][l] = 1;
                    }
                }
            }
            for (int l = 0; l < h; l++){
                if((i&(1<<l))){
                    for(int a = 0; a < w; a++){
                        mat[l][a] = 1;
                    }
                }
            }
            int c = 0;
            for(int a = 0; a < h; a++){
                for(int b = 0; b < w; b++){
                    if(mat[a][b] != 1 && v[a][b] == '#') c++;
                    mat[a][b] = 0;
                }
            }
            // cout << c << endl;
            ans += (c == k1);
        }
    }
    cout << ans << endl;
} 
signed main(){  
//   freopen("output.txt", "r", stdin);
//   freopen("tt.txt", "w", stdout);
    // flash;
    int t = 1;
    //  cin >> t;  
    for(int tc = 1; tc <= t; tc++){
    // goog(tc);
        solve();
		if(tc != t) cout << endl;
    }
}

Measured memory_bytes: 3632