/*jai_ganeshdeva*/

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define pu push  //  adds the value to the last of the queue 
#define lld long long int
#define ins insert /// used in set to insert the values 
#define adv advance  /// used to increment the iterator
#define mp make_pair
#define fi first
#define se second
#define all(c) c.begin(),c.end()
#define PI 3.1415926
#define INF (lld)1e18
#define vl  vector<long long int >
#define vpll vector< pair<lld ,lld> >
#define vvl vector<vector<lld> > 
#define pll pair <lld,lld>
#define modA(cccc,bbbb ,p) (((cccc+bbbb)%p+p)%p)
#define modS(cccc,bbbb ,p) (((cccc-bbbb)%p+p)%p)
#define modM(cccc,bbbb ,p) ((((cccc%p)*(bbbb%p))%p+p)%p)

long long int modp(lld a,lld p,lld n)
{
    lld d[100];
    lld i,j,k,l;
    if(n==0) return 1;
    for(i=0;n>=1;i++)
    {
        d[i]=n%2;
        n/=2;
    }
    l=i;
    long long int e=1;
    if(d[0]==1) e*=(a%p);
    for(i=1;i<l;i++)
    {
        a*=a;
        a=a%p;
        if(d[i]==1) 
        {
            e*=a;
            e=e%p;
        }
    }
    return e%p;
}
lld modInverse(lld n, lld p) 
{ 
    return modp(n, p, p-2); 
}

// lld fac[500005]; 

// void getfac(lld p)
// {
//     fac[0] = 1; 
//     for (lld i=1 ; i<=500005; i++) 
//         fac[i] = fac[i-1]*i%p; 
// }    

// long long int nCrmodp(lld n, lld r,lld p) 
// { 
//    // Base case 
//    if (r==0) 
//       return 1; 
     
//     return (fac[n]* modInverse(fac[r], p) % p * 
//             modInverse(fac[n-r], p) % p) % p; 
// }



// lld maxSumSub(vector<lld>& v , lld l)
// {
//     lld x = 0;
//     lld y =0 ;
//     for(i=0;i<l;i++)
//     {
//         y += v[i];
//         if(x<y)
//         {
//             x=y;

//         }
//         if(y<0)
//             y=0;
//     }
//     return x;
// }

// bool sorter(lld a, lld b)
// {
//     vector<lld> v2;
//     vector<lld> w;
//     // cout<<"A == " <<a<<"  B== "<<b;
//     while(a>=1)
//     {
//         v2.pb(a%10);
//         a/=10;
//     }
//     while(b>=1)
//     {
//         w.pb(b%10);
//         b/=10;
//     }   
       
//     reverse(all(v2));
//     reverse(all(w));
//     lld l1 = v2.size();
//     lld l2 = w.size();
//     lld  l = (l1*l2)/__gcd(l1,l2);
//     // cout<<l1<< " "<<l2<< " "<<l<< " ";
//     for(int i=0;i<l;i++)
//     {
//         if(v2[i%l1]!=w[i%l2])
//         {
//             // cout<< "   "<< (v2[i%l1] > w[i%l2])<<"\n";
//             return v2[i%l1] > w[i%l2];
//         }
//     }
//     // printf("false\n");
//     return false;
// }

bool sorter(pll & a , pll & b)
{
    if(a.fi != b.fi)
    {
        return a.fi> b.fi;
    }
    return b.se > a.se;
}


// vector<lld> parent(200001);

// lld find_set(lld x)
// {
//     if(parent[x]==x) return x;
//     return parent[x] = find_set(parent[x]);
// }
// lld union_set(lld a,lld b)
// {
//     a = find_set(a);
//     b = find_set(b);
//     if(a!=b)
//     {
//         parent[a] = b;
//     }
// }

lld p1=1e9 + 7,p2=998244353;
lld l,r,mid,ans;
lld n,i,j,k,g,m;
lld x,y,n1,n2,h,z,c;
lld aa=1;

/*
void solve()
{
    cin>>n;
    map<lld,lld> m1,m2;
    for(i=0;i<n;i++)
    {
        cin>>x;
        m1[x]++;
        m2[x]++;
    }
    for(i=0;i<n;i++)
    {
        cin>>y;
        m2[y]++;
    }
    vector<lld> w2,w4;
    vector<pll> v,w;
    k=0;
    for(auto it=m1.begin();it!=m1.end();it++)
    {
        v.pb({it->first , it->second});

    }
    for(auto it=m2.begin();it!=m2.end();it++)
    {
        if((it->second)%2== 1) k=1;
        w.pb({it->first , it->second});
    }

    if(k==1)
    {
        cout<<"-1";
        return;
    }
    l = w.size();
    x =0 ;
    
    lld l2=v.size();
    // cout<<l<<" "<<l2<< " ";
    for(i=0;i<l;i++)
    {
        y=w[i].se;
        y/=2;
        if(x<l2 && v[x].fi==w[i].fi)
        {
            y-=v[x].se;
            x+=1;
        }
        // cout<<y<< "AA   ";
        if(y>0)
        {
            for(j=0;j<y;j++)
            {
                w2.pb(w[i].fi);
            }
        }
        else if(y<0)
        {
            y*=-1;
            for(j=0;j<y;j++)
            {
                w4.pb(w[i].fi);
            }
        }
    }
    lld l1=w2.size();
    ans=0;
    
    cout<<ans;
}*/
void solve()
{
    cin>>n>>m>>k;
    char a[n][m];
    lld z=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            cin>>a[i][j];
            if(a[i][j]=='#') z+=1;
        }
    }
    ans=0;
    x =y= 1;
    for(i=0;i<n;i++) x*=2;
    for(i=0;i<m;i++) y*=2;

    for(int ii=0;ii<x;ii++)
    {
        for(int jj=0;jj<y;jj++)
        {
            vector<lld> v(6),w(6);
            lld b=ii,c=jj;
            for(lld kk =0;kk<6;kk++)
            {
                v[kk]=b%2;
                b/=2;
                w[kk]=c%2;
                c/=2;
            }
            b=0;
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    if(a[i][j]=='#' && (v[i]==1 || w[j]==1)) 
                        b+=1;
                }
            }
            if(b==z-k) ans+=1;
        }
    }
    cout<<ans;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    lld t=1;
    
    // cin>>t;
    // cout<<t;
     // getfac(p1);
    //check the value by which modulo is to be taken
    lld ans=0;
    for(int i=0;i<t;i++)
    {
        solve();
    
        // cout<<"\n";
    }
    return 0;
}


Measured memory_bytes: 3656