//
// A.cpp
// CODE
//
// Created by Vikas Yadav on 29/10/14.
// Copyright (c) 2014 Vikas Yadav. All rights reserved.
//
#include <cstring>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iterator>
#include <memory.h>
#include <cassert>
using namespace std;
#define assn(n, a, b) assert(n<=b and n>=a)
#define pb push_back
#define mp make_pair
#define gc getchar_unlocked
#define F first
#define S second
#define endl '\n'
#define MOD 1000000007
#define N 112
#define M 112
#define K 11
int n,k,m;
long long dp[N][M][K+2];
int states[(1<<K)][K+2][2];
bool charat(int str,int ind){
return ((str&(1<<ind))>>ind);
}
int getNextState(int str,int state, int x){
if (state<k)
if(x==charat(str,state))
return state+1;
int ns, i;
for (ns = state; ns > 0; ns--)
if(charat(str,ns-1) == x){
for(i = 0; i < ns-1; i++)
if (charat(str,i)!=charat(str,state-ns+1+i))
break;
if (i == ns-1)
return ns;
}
return 0;
}
void build_states(int str){
states[str][0][0] = 0,states[str][0][1] = 0;
states[str][0][(str&1)] = 1;
for(int a=0;a<=k;a++)
for(int b=0;b<2;b++)
states[str][a][b] = getNextState(str, a, b);
}
void func(){
long long ans = 0;
for(int str=0;str<(1<<k);str++){
for(int a=0;a<=n;a++)
for(int b=0;b<=n;b++)
for(int c=0;c<=k;c++)
dp[a][b][c] = 0;
dp[k][0][0] = 1;
for(int a=k;a<=n;a++){
for(int b=0;b<=a;b++){
for(int c=0;c<=k;c++){
dp[a+1][b+(states[str][c][0]==k?1:0)][states[str][c][0]] += (dp[a][b][c]);
dp[a+1][b+(states[str][c][1]==k?1:0)][states[str][c][1]] += (dp[a][b][c]);
while(dp[a+1][b+(states[str][c][0]==k?1:0)][states[str][c][0]]>=MOD)
dp[a+1][b+(states[str][c][0]==k?1:0)][states[str][c][0]] -= MOD;
while(dp[a+1][b+(states[str][c][1]==k?1:0)][states[str][c][1]]>=MOD)
dp[a+1][b+(states[str][c][1]==k?1:0)][states[str][c][1]] -= MOD;
}
}
}
for(int b=m+1;b<=n;b++)
for(int c=0;c<=k;c++){
ans += dp[n][b][c];
while(ans>=MOD)
ans -= MOD;
}
}
printf("%lld\n", ans);
}
int main(){
int tt = 1;
//double st = clock();
//freopen("./Input/in11.in", "r", stdin);
//freopen("./Output/out111.out", "w", stdout);
scanf("%d", &tt);
assn(tt, 1, 10);
while(tt--){
scanf("%d%d%d", &n, &k, &m);
assn(n, 1, 100);
assn(k, 0, min(10, n));
assn(m, 0, n-1);
for(int a=0;a<(1<<K);a++)
for(int b=0;b<K+2;b++)
states[a][b][0] = 0,states[a][b][1] = 0;
for(int a=0;a<(1<<k);a++)build_states(a);
func();
}
return 0;
}
Ly8KLy8gIEEuY3BwCi8vICBDT0RFCi8vCi8vICBDcmVhdGVkIGJ5IFZpa2FzIFlhZGF2IG9uIDI5LzEwLzE0LgovLyAgQ29weXJpZ2h0IChjKSAyMDE0IFZpa2FzIFlhZGF2LiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLwogCiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxudW1lcmljPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KI2luY2x1ZGUgPG1lbW9yeS5oPgojaW5jbHVkZSA8Y2Fzc2VydD4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgYXNzbihuLCBhLCBiKSBhc3NlcnQobjw9YiBhbmQgbj49YSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBnYyBnZXRjaGFyX3VubG9ja2VkCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCiAKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIE4gMTEyCiNkZWZpbmUgTSAxMTIKI2RlZmluZSBLIDExCiAKaW50IG4sayxtOwpsb25nIGxvbmcgZHBbTl1bTV1bSysyXTsKaW50IHN0YXRlc1soMTw8SyldW0srMl1bMl07CiAKYm9vbCBjaGFyYXQoaW50IHN0cixpbnQgaW5kKXsKICAgIHJldHVybiAoKHN0ciYoMTw8aW5kKSk+PmluZCk7Cn0KIAppbnQgZ2V0TmV4dFN0YXRlKGludCBzdHIsaW50IHN0YXRlLCBpbnQgeCl7CiAgICBpZiAoc3RhdGU8aykKICAgICAgICBpZih4PT1jaGFyYXQoc3RyLHN0YXRlKSkKICAgICAgICAgICAgcmV0dXJuIHN0YXRlKzE7CiAgICBpbnQgbnMsIGk7CiAgICBmb3IgKG5zID0gc3RhdGU7IG5zID4gMDsgbnMtLSkKICAgICAgICBpZihjaGFyYXQoc3RyLG5zLTEpID09IHgpewogICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBucy0xOyBpKyspCiAgICAgICAgICAgICAgICBpZiAoY2hhcmF0KHN0cixpKSE9Y2hhcmF0KHN0cixzdGF0ZS1ucysxK2kpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBpZiAoaSA9PSBucy0xKQogICAgICAgICAgICAgICAgcmV0dXJuIG5zOwogICAgICAgIH0KICAgIHJldHVybiAwOwp9CiAKdm9pZCBidWlsZF9zdGF0ZXMoaW50IHN0cil7CiAgICBzdGF0ZXNbc3RyXVswXVswXSA9IDAsc3RhdGVzW3N0cl1bMF1bMV0gPSAwOwogICAgc3RhdGVzW3N0cl1bMF1bKHN0ciYxKV0gPSAxOwogICAgZm9yKGludCBhPTA7YTw9azthKyspCiAgICAgICAgZm9yKGludCBiPTA7YjwyO2IrKykKICAgICAgICAgICAgc3RhdGVzW3N0cl1bYV1bYl0gPSBnZXROZXh0U3RhdGUoc3RyLCBhLCBiKTsKfQogCnZvaWQgZnVuYygpewogICAgbG9uZyBsb25nIGFucyA9IDA7CiAgICBmb3IoaW50IHN0cj0wO3N0cjwoMTw8ayk7c3RyKyspewogICAgICAgIGZvcihpbnQgYT0wO2E8PW47YSsrKQogICAgICAgICAgICBmb3IoaW50IGI9MDtiPD1uO2IrKykKICAgICAgICAgICAgICAgIGZvcihpbnQgYz0wO2M8PWs7YysrKQogICAgICAgICAgICAgICAgICAgIGRwW2FdW2JdW2NdID0gMDsKICAgICAgICBkcFtrXVswXVswXSA9IDE7CiAgICAgICAgZm9yKGludCBhPWs7YTw9bjthKyspewogICAgICAgICAgICBmb3IoaW50IGI9MDtiPD1hO2IrKyl7CiAgICAgICAgICAgICAgICBmb3IoaW50IGM9MDtjPD1rO2MrKyl7CiAgICAgICAgICAgICAgICAgICAgZHBbYSsxXVtiKyhzdGF0ZXNbc3RyXVtjXVswXT09az8xOjApXVtzdGF0ZXNbc3RyXVtjXVswXV0gKz0gKGRwW2FdW2JdW2NdKTsKICAgICAgICAgICAgICAgICAgICBkcFthKzFdW2IrKHN0YXRlc1tzdHJdW2NdWzFdPT1rPzE6MCldW3N0YXRlc1tzdHJdW2NdWzFdXSArPSAoZHBbYV1bYl1bY10pOwogICAgICAgICAgICAgICAgICAgIHdoaWxlKGRwW2ErMV1bYisoc3RhdGVzW3N0cl1bY11bMF09PWs/MTowKV1bc3RhdGVzW3N0cl1bY11bMF1dPj1NT0QpCiAgICAgICAgICAgICAgICAgICAgICAgIGRwW2ErMV1bYisoc3RhdGVzW3N0cl1bY11bMF09PWs/MTowKV1bc3RhdGVzW3N0cl1bY11bMF1dIC09IE1PRDsKICAgICAgICAgICAgICAgICAgICB3aGlsZShkcFthKzFdW2IrKHN0YXRlc1tzdHJdW2NdWzFdPT1rPzE6MCldW3N0YXRlc1tzdHJdW2NdWzFdXT49TU9EKQogICAgICAgICAgICAgICAgICAgICAgICBkcFthKzFdW2IrKHN0YXRlc1tzdHJdW2NdWzFdPT1rPzE6MCldW3N0YXRlc1tzdHJdW2NdWzFdXSAtPSBNT0Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGludCBiPW0rMTtiPD1uO2IrKykKICAgICAgICAgICAgZm9yKGludCBjPTA7Yzw9aztjKyspewogICAgICAgICAgICAgICAgYW5zICs9IGRwW25dW2JdW2NdOwogICAgICAgICAgICAgICAgd2hpbGUoYW5zPj1NT0QpCiAgICAgICAgICAgICAgICAgICAgYW5zIC09IE1PRDsKICAgICAgICAgICAgfQogICAgfQogICAgcHJpbnRmKCIlbGxkXG4iLCBhbnMpOwp9CiAKaW50IG1haW4oKXsKICAgIGludCB0dCA9IDE7CiAgICAvL2RvdWJsZSBzdCA9IGNsb2NrKCk7CiAgICAvL2ZyZW9wZW4oIi4vSW5wdXQvaW4xMS5pbiIsICJyIiwgc3RkaW4pOwogICAgLy9mcmVvcGVuKCIuL091dHB1dC9vdXQxMTEub3V0IiwgInciLCBzdGRvdXQpOwogICAgc2NhbmYoIiVkIiwgJnR0KTsKICAgIGFzc24odHQsIDEsIDEwKTsKICAgIHdoaWxlKHR0LS0pewogICAgICAgIHNjYW5mKCIlZCVkJWQiLCAmbiwgJmssICZtKTsKICAgICAgICBhc3NuKG4sIDEsIDEwMCk7CiAgICAgICAgYXNzbihrLCAwLCBtaW4oMTAsIG4pKTsKICAgICAgICBhc3NuKG0sIDAsIG4tMSk7CiAgICAgICAgZm9yKGludCBhPTA7YTwoMTw8Syk7YSsrKQogICAgICAgICAgICBmb3IoaW50IGI9MDtiPEsrMjtiKyspCiAgICAgICAgICAgICAgICBzdGF0ZXNbYV1bYl1bMF0gPSAwLHN0YXRlc1thXVtiXVsxXSA9IDA7CiAgICAgICAgZm9yKGludCBhPTA7YTwoMTw8ayk7YSsrKWJ1aWxkX3N0YXRlcyhhKTsKICAgICAgICBmdW5jKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQog