/*
    handle - pruvi007
    questionName - 
    Contest - 
    Topic - 
    Platform - 
*/
#include<bits/stdc++.h>
using namespace std;
#define ll          long long int
#define fast         ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define INF          1e18
#define MOD          1000000007
#define Vi           vector<ll> 
#define Vs           vector<string>
#define VI           vector<vector<ll> >
#define PII          pair<ll,ll> 
#define PSI          pair<string,ll>
#define PB           push_back


int dx[] = {1,-1,0,0};
int dy[] = {0,0,-1,1};
int DX[] = {0,-1,-1,-1,0,1,1,1};
int DY[] = {-1,-1,0,1,1,1,0,-1};

vector<string> ans;
void genSubs(Vi &a,int k,int l,Vi temp)
{
    if(l>=a.size())
    {
        if(temp.size()==k)
        {
            string s = "";
            for(int i=0;i<temp.size();i++)
                s += to_string(temp[i]);
            ans.PB(s);
            
        }
        return;
    }
    temp.PB(a[l]);
    genSubs(a,k,l+1,temp);
    temp.pop_back();
    genSubs(a,k,l+1,temp);
}

bool valid(vector<string> &s,string R,string C,int k)
{
    vector<string> temp = s;
    for(int i=0;i<R.length();i++)
    {
        int x = R[i]-'0';
        for(int j=0;j<s[0].length();j++)
            s[x-1][j] = 'R';
    }
    for(int i=0;i<C.length();i++)
    {
        int x = C[i]-'0';
        for(int j=0;j<s.size();j++)
            s[j][x-1]='R';
    }
    int c = 0;
    for(int i=0;i<s.size();i++)
    {
        for(int j=0;j<s[0].length();j++)
        {
            if(s[i][j]=='#')
                c++;
        }
    }
    s = temp;
    return c==k;
}
int main()
{
    fast;
    int n,m,k;
    cin >> n >> m >> k;
    vector<string> s(n);
    for(int i=0;i<n;i++)
        cin >> s[i];
    Vi r,c;
    for(int i=1;i<=n;i++)
        r.PB(i);
    for(int i=1;i<=m;i++)
        c.PB(i);
    // get ri number of rows (all subsets of size ri)
    vector< vector<string> >  R,C;
    for(int i=0;i<r.size();i++)
    {
        int size = r[i];
        // get all subsets of this size
        ans.clear();
        genSubs(r,size,0,vector<ll>{});
        R.PB(ans);

    }
    for(int i=0;i<c.size();i++)
    {
        int size = c[i];
        // get all subsets of this size
        ans.clear();
        genSubs(c,size,0,vector<ll>{});
        C.PB(ans);

    }
    R.PB(vector<string> {""});C.PB(vector<string> {""});
    // for(int i=0;i<R.size();i++)
    // {
    //     vector<string> temp = R[i];
    //     cout << (i+1) << ": ";
    //     for(int j=0;j<temp.size();j++)
    //         cout << temp[j] <<  " ";
    //     cout << '\n';
    // }
    // for(int i=0;i<C.size();i++)
    // {
    //     vector<string> temp = C[i];
    //     cout << (i+1) << ": ";
    //     for(int j=0;j<temp.size();j++)
    //         cout << temp[j] <<  " ";
    //     cout << '\n';
    // }


    int countWays = 0;
    for(int i=0;i<R.size();i++)
    {
        vector<string> temp = R[i];
        for(int j=0;j<temp.size();j++)
        {
            for(int K=0;K<C.size();K++)
            {
                vector<string> TEMP = C[K];
                for(int L=0;L<TEMP.size();L++)
                {
                    // numrows-> temp[j]
                    // num cols-> TEMP[L]
                    if( valid(s,temp[j],TEMP[L],k) )
                    {
                        // cout << temp[j] << "," << TEMP[L] << '\n';
                        countWays++;
                    }
                        
                }
            }
        }
    }
    cout << countWays << '\n';
}

Measured memory_bytes: 3744