#include <bits/stdc++.h>
using namespace std;
const int maxN = 111;
const int maxM = 11111;
const int mod = 1e9 + 7;
int dp[maxN][maxM], n, m, k;
vector<int> adj[ maxN ];
void dfs(int u, int p=0) {
for( auto it: adj[u] ) {
if( it != p ) {
dfs(it, u);
}
}
for(int y=1; y<=m; y++) {
dp[u][y] = 1;
for( auto it: adj[u] ) {
if( it != p ) {
int ans = dp[it][m]; // total sum
int l, r; // finding range to be subtracted
l = max(y - k + 1, 1);
r = min(m, y + k - 1);
if( l <= r ) {
// subtracting range
ans -= dp[it][r] - dp[it][l-1];
if( ans < 0 ) ans += mod;
if( ans > mod ) ans -= mod;
}
dp[u][y] = 1LL * dp[u][y] * ans % mod;
}
}
dp[u][y] += dp[u][y-1]; // maintaining prefix sum
if( dp[u][y] >= mod )
dp[u][y] -= mod;
}
}
#define f_in(st) freopen(st,"r",stdin)
#define f_out(st) freopen(st,"w",stdout)
int main() {
// f_in( "in10.txt" );
// f_out( "output.txt" );
int t; cin >> t;
while( t-- ) {
memset(dp, 0, sizeof dp);
cin >> n >> m >> k;
for(int i=1; i<n; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
cout << dp[1][m] << "\n";
for(int i=1; i<=n; i++) adj[i].clear();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4TiA9IDExMTsKY29uc3QgaW50IG1heE0gPSAxMTExMTsKY29uc3QgaW50IG1vZCA9IDFlOSArIDc7CgppbnQgZHBbbWF4Tl1bbWF4TV0sIG4sIG0sIGs7CnZlY3RvcjxpbnQ+IGFkalsgbWF4TiBdOwp2b2lkIGRmcyhpbnQgdSwgaW50IHA9MCkgewoJZm9yKCBhdXRvIGl0OiBhZGpbdV0gKSB7CgkJaWYoIGl0ICE9IHAgKSB7CgkJCWRmcyhpdCwgdSk7CgkJfQoJfQoKCWZvcihpbnQgeT0xOyB5PD1tOyB5KyspIHsKCQlkcFt1XVt5XSA9IDE7CgkJZm9yKCBhdXRvIGl0OiBhZGpbdV0gKSB7CgkJCWlmKCBpdCAhPSBwICkgewoJCQkJaW50IGFucyA9IGRwW2l0XVttXTsgLy8gdG90YWwgc3VtCgkJCQlpbnQgbCwgcjsgLy8gZmluZGluZyByYW5nZSB0byBiZSBzdWJ0cmFjdGVkCgkJCQlsID0gbWF4KHkgLSBrICsgMSwgMSk7CgkJCQlyID0gbWluKG0sIHkgKyBrIC0gMSk7CgkJCQlpZiggbCA8PSByICkgewoJCQkJCS8vIHN1YnRyYWN0aW5nIHJhbmdlCgkJCQkJYW5zIC09IGRwW2l0XVtyXSAtIGRwW2l0XVtsLTFdOwoJCQkJCWlmKCBhbnMgPCAwICkgYW5zICs9IG1vZDsKCQkJCQlpZiggYW5zID4gbW9kICkgYW5zIC09IG1vZDsKCQkJCX0KCQkJCWRwW3VdW3ldID0gMUxMICogZHBbdV1beV0gKiBhbnMgJSBtb2Q7IAkKCQkJfQoJCX0KCQlkcFt1XVt5XSArPSBkcFt1XVt5LTFdOyAvLyBtYWludGFpbmluZyBwcmVmaXggc3VtCgkJaWYoIGRwW3VdW3ldID49IG1vZCApIAoJCQlkcFt1XVt5XSAtPSBtb2Q7Cgl9Cn0KCiNkZWZpbmUgZl9pbihzdCkgZnJlb3BlbihzdCwiciIsc3RkaW4pCiNkZWZpbmUgZl9vdXQoc3QpIGZyZW9wZW4oc3QsInciLHN0ZG91dCkKCgppbnQgbWFpbigpIHsKCS8vIGZfaW4oICJpbjEwLnR4dCIgKTsKCS8vIGZfb3V0KCAib3V0cHV0LnR4dCIgKTsKCWludCB0OyBjaW4gPj4gdDsKCXdoaWxlKCB0LS0gKSB7CgkJbWVtc2V0KGRwLCAwLCBzaXplb2YgZHApOwoJCWNpbiA+PiBuID4+IG0gPj4gazsKCQlmb3IoaW50IGk9MTsgaTxuOyBpKyspIHsKCQkJaW50IHUsIHY7IGNpbiA+PiB1ID4+IHY7CgkJCWFkalt1XS5wdXNoX2JhY2sodik7CgkJCWFkalt2XS5wdXNoX2JhY2sodSk7CgkJfQoJCWRmcygxLCAwKTsKCQljb3V0IDw8IGRwWzFdW21dIDw8ICJcbiI7CgkJZm9yKGludCBpPTE7IGk8PW47IGkrKykgYWRqW2ldLmNsZWFyKCk7Cgl9CglyZXR1cm4gMDsKfQ==