#include<cstdio>
#include<cstring>
#include<queue>
const int N = 1e6 + 5;
struct edge {
int nxt, to;
} e[N << 1];
int n, m, k, head[N], cnt;
bool find[N];
inline int add(int u, int v) {
e[++cnt].nxt = head[u];
e[cnt].to = v;
head[u] = cnt;
}
void search(int x, int del) {
find[x] = 1;
for(int i = head[x]; i; i = e[i].nxt) {
int y = e[i].to;
if(y == del) continue;
if(!find[y]) search(y, del);
}
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1, u, v; i <= m; ++i) {
scanf("%d%d", &u, &v);
add(u, v);
add(v, u);
}
for(int i = 1; i <= n; ++i) {
int res = 0;
memset(find, 0, sizeof find);
for(int j = 1; j <= n; ++j) {
if(j == i) continue;
if(!find[j]) {
++res;
search(j, i);
}
}
if(res - 1 <= k) printf("Yes\n");
else printf("No\n");
}
return 0;
}