#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(int i=a;i<b;i++)
#define lrep(i,a,b) for(int i=a;i<b;i++)
#define per(i,a,b) for(int i=b-1;i>=a;i--)
const int mod=1e6+7;
const int maxn=510;
//组合数打表 模版
int C[maxn][maxn];
void init(){
C[0][0]=1;
rep(i,1,maxn){
C[i][0]=C[i][i]=1;
rep(j,1,i){
C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
}
}
/*
容斥定理:和18省赛的题差不多
感觉最难的就是怎样来划分事件,也就是A,B,C,D
然后总是反着求,感觉还没摸到根
*/
int main(){
init();
int T;
scanf("%d",&T);
rep(kase,1,T+1){
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
if(n==1||m==1){
printf("Case %d: %d\n",kase,n*m==k?1:0);
continue;
}
//容斥所有的情况,++--
int ans=0;
rep(i,0,16){
//printf("i:%d\n",i);
int cnt=0,r=n,c=m;
if(i&1){
r--;cnt++;
}
if(i&2){
r--;cnt++;
}
if(i&4){
c--;cnt++;
}
if(i&8){
c--;cnt++;
}
// printf("r:%d c:%d\n",r,c);
if(cnt&1)
ans=(ans+mod-C[r*c][k])%mod;
else
ans=(ans+C[r*c][k])%mod;
}
printf("Case %d: %d\n",kase,ans);
}
return 0;
}