#include using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back #define rep(i, a, b) for(int i=(a); i<(b); i++) #define per(i, a, b) for(int i=(b)-1; i>=(a); i--) #define sz(a) (int)a.size() #define de(a) cout << #a << " = " << a << endl #define dd(a) cout << #a << " = " << a << " " #define all(a) a.begin(), a.end() #define pw(x) (1ll<<(x)) #define endl "\n" typedef long long ll; typedef pair pii; typedef vector vi; const int P = 1e9 + 7; int add(int a, int b) {if((a += b) >= P) a -= P; return a;} int sub(int a, int b) {if((a -= b) < 0) a += P; return a;} int mul(int a, int b) {return 1ll * a * b % P;} int kpow(int a, int b) {int r=1;for(;b;b>>=1,a=mul(a,a)) {if(b&1)r=mul(r,a);}return r;} //--- const int N = 307, M = 307, LINF=0x3fffffff; struct MaxFlow { // N - V , M - E int n, et, dis[N], que[N], cur[N], head[N]; struct Edge { int s, t, v, nxt; Edge() { } Edge(int _s, int _t, int _v, int _nxt) { s = _s, t = _t, v = _v, nxt = _nxt; } } e[M * 2], b[M * 2]; void undo() { for(int i=0;i= 0; --i) flow = min(flow, (ll) e[que[i]].v); for (int i = qt - 1; i >= 0; --i) { e[que[i]].v -= flow, e[que[i] ^ 1].v += flow; if (!e[que[i]].v) qt = i; } u = e[que[qt]].s, maxflow += flow; } else if (~cur[u] && e[cur[u]].v && dis[u] + 1 == dis[e[cur[u]].t]) { que[qt++] = cur[u]; u = e[cur[u]].t; } else { while (u != S && !~cur[u]) u = e[que[--qt]].s; cur[u] = e[cur[u]].nxt; } } } return maxflow; } } G, g; int main() { int T; scanf("%d", &T); while(T--) { int n, m, k; scanf("%d%d%d", &n, &m, &k); if(k * (n - 1) > m) { puts("No"); continue; } G.init(N); while(m--) { int a, b; scanf("%d%d", &a, &b); G.addEdge(a, b, 1); G.addEdge(b, a, 1); } int f = 1; rep(i, 1, n + 1)rep(j, i + 1, n + 1)if(f) { g = G; if(g.dinic(i, j) < k)f = 0; } puts(f ? "Yes" : "No"); } return 0; }