#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair < int , int >;
using i3 = pair < int , ii >;
using li = pair < ll , int >;
using lii = pair < ll , ii >;
using pll = pair < ll , ll >;
using vi = vector < int >;
using vl = vector < ll >;
using vii = vector < ii >;
using vpll = vector < pll >;
using vi3 = vector < i3 >;
using vlii = vector < lii >;
const int N = 110;
const ll INF = 1e17 + 7;
const double eps = 1e-9 , PI = acos(-1);
int n , m , K;
int mat[N][N];
int dis[N][N];
int ok[N];
void solve(int testCase){
scanf("%d %d %d" , &n , &m , &K);
for(int i = 0 ; i < m ; i ++){
int u , v;
scanf("%d %d" , &u , &v);
mat[u][v] = mat[v][u] = 1;
}
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < n ; j ++){
if(i != j){
if(mat[i][j] == 0)dis[i][j] = 1e9;
else dis[i][j] = mat[i][j];
}
else dis[i][j] = mat[i][j];
}
}
for(int k = 0 ; k < n ; k ++){
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < n ; j ++){
dis[i][j] = min(dis[i][j] , dis[i][k] + dis[k][j]);
}
}
}
/*
cout << endl << "distances:\n";
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < n ; j ++){
cout << "dis " << i << " -> " << j << " = " << dis[i][j] << endl;
}
}
cout << endl;
*/
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < n ; j ++){
bool getOut = 0;
for(int k = 0 ; k < n ; k ++){
int dis2 = dis[i][j] + dis[j][k] + dis[k][i];
//cout << i << " -> " << j << " -> " << k << " -> " << i << " = " << dis2 << endl;
if( (j != i) ){
//cout << K << " " << dis2 << endl;
if(((K - dis2) >= 0) && ((K - dis2)%2 == 0)){
ok[i] = 1;
getOut = 1;
//cout << i << " " << j << " " << k << endl;
//cout << "dis = " << dis2 << endl;
break;
}
}
}
if(getOut)break;
}
}
int ans = 0;
for(int i = 0 ; i < n ; i ++){
ans += ok[i];
}
printf("%d\n" , ans);
}
main(){
int t = 1;
scanf("%d" , &t);
for(int testCase = 1 ; testCase <= t ; testCase ++){
solve(testCase);
memset(ok , 0 , sizeof ok);
memset(mat , 0 , sizeof mat);
memset(dis , 0 , sizeof dis);
}
return 0;
}
/*
4 4 3
0 1
1 2
2 3
3 3
*/