#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(),(x).end() #define INS(x) inserter(x,x.begin()) #define pb push_back #define mp make_pair #define rep(i,l,r) for (int i=l;i=l;i--) typedef long long ll; typedef unsigned long long ull; typedef pair point; typedef pair pii; const ll inf = 9.2e18; const int maxn = 1e3 + 70; const int INF = 2.1e9; const int maxm = 1e6 + 70; const int MOD = 1e9 + 7; const double eps = 1e-7; const double PI = acos(-1.0); int n, m, k; string s[maxn]; int vis[maxn]; int main(){ //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int T; cin >> T; for (int kase = 1; kase <= T; kase++){ cin >> n >> m >> k; for (int i = 0; i < n; i++){ cin >> s[i]; } int ans = 0; for (int i = 0; i < (1 << m); i++){ memset(vis, 0, sizeof(vis)); for (int j = 0; j < n; j++){ int t = 0; for (int k = 0; k < m; k++){ if (i & (1 << k)) t |= ((s[j][k] - 'A') << k); } vis[t]++; } int num = 0; for (int i = 0; i < (1 << m); i++){ num += vis[i] * (n - vis[i]); } num /= 2; if (num >= k) ans++; } cout << "Case #" << kase << ": " << ans << endl; } return 0; }