#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const int MAXN = 1E5 + 10;
const LL MM = 1E9 + 7;

LL inv[MAXN],fac[MAXN],facinv[MAXN];

LL C(int n, int m){
    if (n < m) return 0;
    return fac[n] * facinv[m] % MM * facinv[n - m] % MM;
}

LL Work(int L, int m, int k){
    if (m == 3){
        if (k == 3) 
            return (LL)L * (L+1) * (2*L+1) / 6;
        if (k == 2)
            return C(2*L+1, 3) - (LL)L * (L+1) * (2*L+1) / 6;
        return 0;
    }
    else{
        if (k == 2)
            return (LL)(2*L+1) * (C(L+1, m-1) + C(L, m-1));
        if (k == 1)
            return (LL)(2*L+1) * (m - 4) % MM * C(L+1, m-1);
        if (k == 0)
            return C(2*L+1, m) - Work(L, m, 1) - Work(L, m, 2);
        return 0;
    }
}

int main(){
    inv[0] = 0;
    inv[1] = 1;
    for(int i = 2; i < MAXN; i++)
        inv[i] = (MM - (MM / i) * inv[MM % i] % MM) % MM;
    fac[0] = facinv[0] = 1;
    for(int i = 1; i < MAXN; i++){
        fac[i] = i * fac[i - 1] % MM;
        facinv[i] = inv[i] * facinv[i - 1] % MM;
    }
    int T;
    scanf("%d",&T);
    for (int _ = 1; _ <= T; _++){
        int n,m,k;
        scanf("%d%d%d", &n, &m, &k);
        printf("Case #%d: %lld\n", _, (Work(n/2, m, k) % MM + MM) % MM);
    }
}
