#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1000 + 10;
vector<int> gr[maxn], nodes[maxn];
int n, s, k, fa[maxn];
bool covered[maxn];
void dfs(int current, int father, int depth)
{
fa[current] = father;
int Size = gr[current].size();
if(Size == 1 && depth > k) nodes[depth].push_back(current);
for(int i = 0; i < Size; i++) {
int v = gr[current][i];
if(v != father) dfs(v, current, depth+1);
}
}
void dfs2(int u, int f, int d) {
if(!covered[u]) covered[u] = true;
int nc = gr[u].size();
for(int i = 0; i < nc; i++) {
int v = gr[u][i];
if(v != f && d < k) dfs2(v, u, d+1);
}
}
int solve() {
int ans = 0;
memset(covered, 0, sizeof(covered));
for(int d = n-1; d > k; d--) {
int Size = nodes[d].size();
for(int i = 0; i < Size; i++) {
int u = nodes[d][i];
if(covered[u]) continue;
int v = u;
for(int j = 0; j < k; j++) v = fa[v];
dfs2(v, -1, 0);
ans++;
}
}
return ans;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
scanf("%d%d", &s, &k);
for(int i = 1; i <= n; i++) { gr[i].clear(); nodes[i].clear();}
for(int i = 0; i < n-1; i++) {
int a, b;
scanf("%d%d", &a, &b);
gr[a].push_back(b);
gr[b].push_back(a);
}
dfs(s, -1, 0);
int res = solve();
printf("%d\n", res);
}
return 0;
}