#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
int main(void){
//FILE *in;
//in=fopen("mis3.in","r");
int n,m,d,i,j,k,a,tmp1,tmp2;
scanf("%d%d%d",&n,&m,&d);
//fscanf(in,"%d",&n);
//fscanf(in,"%d",&m);
//fscanf(in,"%d",&d);
vector<vector<int> > lista;
vector<int> ctrl_s;
vector<int> s;
stack<int> stos;
bool has_d[n];
bool marked[n];
lista.resize(n);
for(i=0;i<m;i++){
scanf("%d%d", &tmp1,&tmp2);
//fscanf(in,"%d",&tmp1);
//fscanf(in,"%d",&tmp2);
lista[tmp1-1].push_back(tmp2-1);
lista[tmp2-1].push_back(tmp1-1);
}
tmp1=0;
for(a=0;a<1000;a++){
for(i=0;i<n;i++){
if(lista[i].size()<d){
for(j=0;j<lista[i].size();j++){
for(k=0;k<lista[lista[i][j]].size();k++){
if(lista[lista[i][j]][k]==i)lista[lista[i][j]].erase(lista[lista[i][j]].begin()+k);
}
}
lista[i].clear();
}
marked[i]=false;
}
}
tmp1=0;
for(i=0;i<n;i++){
if(!marked[i]){
stos.push(i);
while(!stos.empty()){
tmp1=stos.top();
stos.pop();
if(!marked[tmp1]){
ctrl_s.push_back(tmp1);
marked[tmp1]=true;
for(j=0;j<lista[tmp1].size();++j) stos.push(lista[tmp1][j]);
}
}
if(ctrl_s.size()>s.size()) s.swap(ctrl_s);
ctrl_s.clear();
}
}
if(s.size()<=1) {printf("NIE");return 0;}
else{
sort(s.begin(),s.end());
printf("%d\n",s.size());
for(i=0;i<s.size();i++) printf("%d ",s[i]+1);
return 0;
}
}