#include using namespace std; const int maxn = 310; vectorG[maxn]; int maz[maxn][maxn]; int n,m,k; bool vis[maxn]; bool work(){ scanf("%d%d%d",&n,&m,&k); memset(maz,0,sizeof(maz)); for (int i=1;i<=n;i++) G[i].clear(); bool flag = true; for (int i=1;i<=m;i++){ int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); maz[u][v]++; maz[v][u]++; if (maz[u][v] > k) flag = false; } for (int i=1;i<=n;i++) if (G[i].size() < k) {flag = false;break;} if (!flag) return false; memset(vis, false, sizeof(vis)); int tot = n; while (tot--){ int pos = -1; for (int i=1;i<=n;i++){ if (vis[i]){ if (G[i].size() > 0 && G[i].size() < k ) return false; }else if (G[i].size() == k){ pos = i; break; } } if (pos != -1){ for (int i=0,sz = G[pos].size() ; i < sz ; i++){ int to = G[pos][i]; maz[pos][to]--; maz[to][pos]--; vis[to] = true; } }else{ break; // bool fnd = false; // int p = -1,q = -1; // for (int i=1;i<=n;i++){ // for (int j=1;j<=n;j++){ // if (maz[i][j] == k){ // fnd = true; // p = i; q = j; // break; // } // } // if (fnd) break; // } // if (fnd){ // maz[p][q] = 0; // maz[q][p] = 0; // for (int i=0,sz = ) // }else break; } } return true; } int main(){ int cas; scanf("%d",&cas); while (cas--){ if (!work()) printf("No\n"); else printf("Yes\n"); } return 0; }