#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> l_l;
typedef pair<int , int> i_i;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef vector<char> vec;
typedef vector<bool> veb;
typedef vector<string> ves;
typedef vector<vector<ll>> vvl;
typedef vector<vector<int>> vvi;
typedef vector<vector<char>> vvec;
typedef vector<vector<bool>> vveb;
typedef vector<vector<string>> vves;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<(int)(n);i++)
#define rep2(i,n) for(int i=2;i<(int)(n);i++)
#define repk(i,k,n) for(int i=k;i<(int)(n);i++)
#define rev(v) reverse(v.begin(), v.end())
#define fs first
#define sc second
#define pb push_back
#define pp pop_back
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define maxel(a) *max_element(all(a))
#define minel(a) *min_element(all(a))
#define acc accumulate
#define EPS (1e-7)
#define INF (1e9)
#define PI (acos(-1))
#define mod (1000000007)
typedef long long int64;
//const int64 INF = 1LL << 58;
#define dame { puts("-1"); return 0;}
#define YES { cout << "YES" << endl; return 0; }
#define NO { cout << "NO" << endl; return 0; }
#define Yes { cout << "Yes" << endl; return 0; }
#define No { cout << "No" << endl; return 0; }
#define OK { cout << "OK" << endl; return 0; }
#define NG { cout << "NG" << endl; return 0; }
#define sz(v) ((int)(v).size())
#define uniq(a) sort(all(a));(a).resize(unique(all(a)) - a.begin());
#define dab(v) for(auto i:v)cout<<i<<' '; cout << endl;
#define vin(v) for (ll i = 0; i < v.size(); ++i) cin >> v[i];
template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class T>void out(T a){cout << a << endl;}
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};

#define SIZE 200005
#define MOD 1000000007
 
typedef pair <int,int> P;
 
ll inv[SIZE], fac[SIZE], finv[SIZE];
void make(){
	fac[0] = fac[1] = 1;
	finv[0] = finv[1] = 1;
	inv[1] = 1;
	for(int i=2; i<SIZE; i++)
	{
		inv[i] = MOD - inv[MOD%i]*(MOD/i)%MOD;
		fac[i] = fac[i-1] * (ll) i % MOD;
		finv[i] = finv[i-1] * inv[i] % MOD;
	}
    return ;
}
ll comb(int a,int b){
	if(a < b) return 0;
	return fac[a] * (finv[b] * finv[a-b] % MOD) % MOD;
}



ll beki(int a, int n){
    if(n == 0) return 1;
    ll ans = beki(a, n / 2);
    ans = ans * ans;
    if(n % 2 == 1) ans = ans * a;
    return ans;
}


int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
    //cout << fixed << setprecision(15);
    
	int H,W,K;cin>>H>>W>>K;
    vector<vector<char>> c(H, vec(W));
    rep(i,H) rep(j,W) cin>>c[i][j];
    int b = 0;
    rep(i,H) rep(j,W) if(c[i][j] == '#') b++;
    int ans = 0;
    /*rep(i,H+1) rep(j,W+1){
        int gyou = i, retsu = j;
        int tmp = 0;

        if(j != W) rep(k,H) if(c[k][j] == '#') tmp++;
        if(i != H) rep(k,W) if(c[i][k] == '#') tmp++;
        if(j != W and i != H and c[i][j] =='#') tmp--;
        if(b - tmp == K) { cout << i << " " << j << endl; ans++; }
    }*/
    for (int bit = 0; bit < (1<<H); ++bit) {
        vector<int> S;
        for (int i = 0; i < H; ++i) {
            if (bit & (1<<i)) { // i が bit に入るかどうか
                S.push_back(i);
            }

        }
        for(int bit2 = 0; bit2 < (1<<W); ++bit2){
            vector<int> T;
            rep(i,W) if(bit2 & (1<<i)) T.pb(i);
                int tmp = 0;
                if(true) {
                    rep(k,H) rep(l,T.size()) if(c[k][T[l]] == '#') tmp++;
                }
                if(true) {
                    rep(k,W) rep(l,S.size()) if(c[S[l]][k] == '#') tmp++;
                }
                rep(k,S.size()) rep(l,T.size()){
                    if(c[S[k]][T[l]] == '#') tmp--;
                }
            if(b - tmp == K) { ans++; }
        }
        
    }

    out(ans);
}


Measured memory_bytes: 3624