#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
using ll = long long;
using P = pair<ll, ll>;
//マクロ
//forループ関係
//引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
//Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define FOR(i, a, b) for (ll i = a; i <= (ll)(b); i++)
//xにはvectorなどのコンテナ
#define ALL(x) (x).begin(), (x).end() //sortなどの引数を省略したい
#define SIZE(x) ((ll)(x).size())      //sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))   //最大値を求める
#define MIN(x) *min_element(ALL(x))   //最小値を求める
//定数
#define INF 1000000000000 //10^12:極めて大きい値,∞
#define inf 2147483647    //int値の最大値
#define MOD 1000000007    //10^9+7:合同式の法
#define MAXR 100000       //10^5:配列の最大のrange(素数列挙などで使用)
//略記
#define PB push_back //vectorヘの挿入
#define MP make_pair //pairのコンストラクタ
#define F first      //pairの一つ目の要素
#define S second     //pairの二つ目の要素

template <class T>
inline bool chmin(T &a, T b)
{
    if (a > b)
    {
        a = b;
        return true;
    }
    return false;
}
template <class T>
inline bool chmax(T &a, T b)
{
    if (a < b)
    {
        a = b;
        return true;
    }
    return false;
}
int gcd(int a, int b)
{
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}
int lcm(int a, int b)
{
    return a * b / gcd(a, b);
}
int main()
{
    int h, w, k;
    cin >> h >> w >> k;
    ll sum = 0;
    vector<vector<char>> ma(h, vector<char>(w));
    int allbr = 0;
    vector<int> y(h);
    vector<int> x(w);
    rep(i, h)
    {
        int hoge = 0;
        rep(j, w)
        {
            cin >> ma[i][j];
            if (ma[i][j] == '#')
            {
                allbr++;
                hoge++;
            }
        }
        y[i] = hoge;
    }
    rep(j, w)
    {
        int hog = 0;
        rep(i, h)
        {
            if (ma[i][j] == '#')
            {
                hog++;
            }
        }
        x[j] = hog;
    }
    int hbit = 1;
    rep(i, h)
    {
        hbit *= 2;
    }
    int wbit = 1;
    rep(i, w)
    {
        wbit *= 2;
    }
    for (int tmp = 0; tmp < (1 << 6); tmp++)
    {
        if (tmp >= hbit)
        {
            break;
        }
        bitset<6> s(tmp); // 最大max_n個なのでmax_nビットのビット列として扱う
        for (int tm = 0; tm < (1 << 6); tm++)
        {
            if (tm >= wbit)
            {
                break;
            }
            bitset<6> m(tm);
            ll ans = 0;

            // ビット列の1のビットに対応する整数を選んだとみなして総和を求める
            for (int i = 0; i < h; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    if (s.test(i) && m.test(j))
                    {
                        if (ma[i][j] == '#')
                            ans--;
                    }
                }
            }
            for (int i = 0; i < h; i++)
            {
                if (s.test(i))
                {
                    ans += y[i];
                }
            }
            for (int i = 0; i < w; i++)
            {
                if (m.test(i))
                {
                    ans += x[i];
                }
            }
            if (allbr - ans == k)
            {
                sum++;
            }
        }
    }
    cout << sum << endl;
    return 0;
}


Measured memory_bytes: 3632