#include using namespace std; const int maxn = 1010; int n, m, k; char s[maxn][11]; int cur[maxn][11]; int f[maxn]; unordered_map vis; signed main() { // freopen("in", "r", stdin); int T, _ = 0; scanf("%d", &T); while(T--) { scanf("%d%d%d",&n,&m,&k); for(int i = 0; i < n; i++) { scanf("%s", s[i]); } int ret = 0; int mm = 1 << m; for(int i = 1; i < mm; i++) { int qq = 0; for(int j = 0; j < m; j++) { if(i & (1 << j)) { for(int l = 0; l < n; l++) { cur[l][qq] = s[l][j] - 'A' + 1; } qq++; } } for(int j = 0; j < n; j++) f[j] = 0; for(int j = 0; j < n; j++) { for(int l = 0; l < qq; l++) { f[j] <<= 1; f[j] |= (cur[j][l] == 1 ? 1 : 0); } } vis.clear(); for(int j = 0; j < n; j++) vis[f[j]]++; int tot = n, tmp = 0; for(auto p : vis) { tmp += (n - p.second) * p.second; } if(tmp / 2 >= k) ret++; } printf("Case #%d: %d\n", ++_, ret); } return 0; }