#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define fi first #define se second #define lson l,mid,id<<1 #define rson mid+1,r,id<<1|1 #define ls id<<1 #define rs id<<1|1 #define MID(a,b) (((a)+(b))>>1) #define maxx(a,b) ((a)<(b)?(b):(a)) #define minx(a,b) ((a)<(b)?(a):(b)) #define absx(a) ((a)<0?-(a):(a)) #define mk(a,b) make_pair(a,b) #define pb(a) push_back(a) #define itr iterator #define lowbit(x) ((x)&-(x)) typedef unsigned LL ULL; typedef unsigned uint; typedef map mii; typedef pair pii; typedef pair pdd; typedef pair pLL; template< typename T > inline void read(T &x) { static bool fr_f; static char fr_ch; fr_f=0; x=0; fr_ch=getchar(); while(fr_ch<'0' || '9' inline void Max (T &a, T b) {if(a inline void Min (T &a, T b) {if(b inline void Swap(T &a, T &b) {T c=a;a=b;b=c;} template< typename T > inline T Abs(T a) {if(a<0) return -a; else return a;} const double pi = acos(-1.0) ; const int MOD = (int)1e9+7 ; const int INF = (int)0x3f3f3f3f ; const LL LINF = (LL)INF<<32|INF ; const int SINF = (uint)(-1)>>1 ; const LL SLINF = (ULL)(-1)>>1 ; const double DINF = 1e50 ; const double eps = 1e-8 ; const int maxn = (int) 2e3+20 ; const int maxm = (int) 1000+20 ; const int maxk = (int) 1000+20 ; inline int sig(double x) {return x<-eps?-1:x>eps;} inline LL fp(LL a,LL n,LL p) {LL res=1; for(;n;n>>=1,a=a*a%p) if(n&1) res=res*a%p; return res;} templateinline T gcd(T a,T b) {for(T c;b;c=a%b,a=b,b=c); return a;} //--------------------start-------------------- int n, m, k; map mp; string s[1005]; map :: itr mit; void work() { int tc; read(tc); int T_T = 0; while(tc--) { read(n), read(m), read(k); for(int i = 1; i <= n; i++) cin >>s[i]; int ans = 0; for(int p = 0; p < (1 << m); p++) { mp.clear(); for(int i = 1; i <= n; i++) { int hs = 0; for(int j = 0; j < m; j++) { hs <<= 1; if(p & (1 << j)) { hs |= s[i][j] == 'A'; } if(hs >= MOD) hs -= MOD; } mp[hs]++; } int cnt = 0; LL tmp = 0; for(mit = mp.begin(); mit != mp.end(); mit++) { int t = mit->se; tmp += (LL) cnt * t; if(tmp >= k) { ans++; break; } cnt += t; } } printf("Case #%d: %d\n", ++T_T, ans); } } //---------------------end--------------------- int main() { #ifdef yukihana0416 freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); #endif // yukihana0416 work(); return 0; }