#include <stdio.h>
#include <iostream>
#include <map>
#include <math.h>
#include <string>
#include <algorithm>
typedef long long ull;
typedef long long int lli;
const int M=1000000007;
using namespace std;
map<string,ull> htable;
map<lli,string> binarys;
map<lli,int> binaryc;
int aehash(string s)
{
if(htable.count(s)>0)
return htable[s];
string temp = s;
while(temp.find('E')!=-1)
temp.replace(temp.find('E'),1,"");
ull result=temp.length();
if(s.length()>1)
{
string s1 = s.substr(0,s.length()/2);
string s2 = s.substr(s.length()/2,s.length());
result +=max(aehash(s1),aehash(s2));
}
htable[s]=result;
return result;
}
int toBinary(lli i,int bit)
{
if(binarys.count(i)!=0)
{
return binaryc[i];
}
lli temp=i;
string s(bit,'A');
int ecount=0;
do
{
bit--;
if(i%2==1)
{
ecount++;
s[bit]='E';
}
}while((i/=2)!=0);
binarys[temp]=s;
binaryc[temp]=ecount;
return ecount;
}
int main()
{
map<int,ull> count;
int t,a,e,v;
scanf("%d",&t);
while(t--)
{
count.clear();
binarys.clear();
binaryc.clear();
scanf("%d%d%d",&a,&e,&v);
for(lli i=0;i<pow(2,a+e);i++)
{
if( binaryc.count(i)==0 )
if(toBinary(i,a+e)==e)
{
if(htable.count(binarys[i])==0)
htable[binarys[i]]=aehash(binarys[i]);
count[htable[binarys[i]]]++;
}
else continue;
}
count[v]%=M;
printf("%llu\n",count[v]);
}
htable.clear();
binaryc.clear();
binarys.clear();
count.clear();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPG1hdGguaD4KCiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnR5cGVkZWYgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsaTsKY29uc3QgaW50IE09MTAwMDAwMDAwNzsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbWFwPHN0cmluZyx1bGw+IGh0YWJsZTsKbWFwPGxsaSxzdHJpbmc+IGJpbmFyeXM7Cm1hcDxsbGksaW50PiBiaW5hcnljOwoKaW50IGFlaGFzaChzdHJpbmcgcykKewogICAgaWYoaHRhYmxlLmNvdW50KHMpPjApCgkJcmV0dXJuIGh0YWJsZVtzXTsKCglzdHJpbmcgdGVtcCA9IHM7Cgl3aGlsZSh0ZW1wLmZpbmQoJ0UnKSE9LTEpCgkJdGVtcC5yZXBsYWNlKHRlbXAuZmluZCgnRScpLDEsIiIpOwoJdWxsIHJlc3VsdD10ZW1wLmxlbmd0aCgpOwoKCWlmKHMubGVuZ3RoKCk+MSkKCXsKCQlzdHJpbmcgczEgPSBzLnN1YnN0cigwLHMubGVuZ3RoKCkvMik7CgkJc3RyaW5nIHMyID0gcy5zdWJzdHIocy5sZW5ndGgoKS8yLHMubGVuZ3RoKCkpOwoJCXJlc3VsdCArPW1heChhZWhhc2goczEpLGFlaGFzaChzMikpOwoJfQoJaHRhYmxlW3NdPXJlc3VsdDsKCXJldHVybiByZXN1bHQ7Cn0KCmludCB0b0JpbmFyeShsbGkgaSxpbnQgYml0KQp7CglpZihiaW5hcnlzLmNvdW50KGkpIT0wKQoJewoJCXJldHVybiBiaW5hcnljW2ldOwoJfQoJCglsbGkgdGVtcD1pOwoJc3RyaW5nIHMoYml0LCdBJyk7CglpbnQgZWNvdW50PTA7CglkbwoJewoJCWJpdC0tOwoJCWlmKGklMj09MSkKCQl7CgkJCWVjb3VudCsrOwoJCQlzW2JpdF09J0UnOwoJCX0KCX13aGlsZSgoaS89MikhPTApOwoJYmluYXJ5c1t0ZW1wXT1zOwoJYmluYXJ5Y1t0ZW1wXT1lY291bnQ7CglyZXR1cm4gZWNvdW50Owp9CgppbnQgbWFpbigpCnsKCQoJbWFwPGludCx1bGw+IGNvdW50OwoKCWludCB0LGEsZSx2OwoKCXNjYW5mKCIlZCIsJnQpOwoKCXdoaWxlKHQtLSkKCXsKCQljb3VudC5jbGVhcigpOwoJCWJpbmFyeXMuY2xlYXIoKTsKCQliaW5hcnljLmNsZWFyKCk7CgkJc2NhbmYoIiVkJWQlZCIsJmEsJmUsJnYpOwoKCQlmb3IobGxpIGk9MDtpPHBvdygyLGErZSk7aSsrKQoJCXsKCQkJaWYoIGJpbmFyeWMuY291bnQoaSk9PTAgKQoJCQkJaWYodG9CaW5hcnkoaSxhK2UpPT1lKQoJCQkJewoJCQkJCWlmKGh0YWJsZS5jb3VudChiaW5hcnlzW2ldKT09MCkKCQkJCQkJaHRhYmxlW2JpbmFyeXNbaV1dPWFlaGFzaChiaW5hcnlzW2ldKTsKCQkJCQljb3VudFtodGFibGVbYmluYXJ5c1tpXV1dKys7CgkJCQl9CgkJCWVsc2UgY29udGludWU7CgkJfQoJCWNvdW50W3ZdJT1NOwoJCXByaW50ZigiJWxsdVxuIixjb3VudFt2XSk7Cgl9CglodGFibGUuY2xlYXIoKTsKCWJpbmFyeWMuY2xlYXIoKTsKCWJpbmFyeXMuY2xlYXIoKTsKCWNvdW50LmNsZWFyKCk7CglyZXR1cm4gMDsKfQ==