#include <stdio.h>

// Niedokończone :(

int N,m,D;
int a,b;
int drogi[400003][2];
int ilosci[200002][2];
int wskaz_pocz[200003];
int do_sprawdzenia[600009];
int wsk_pierwszy,wsk_ostatni;
int miasto;

int SORT_drogi(int pocz,int kon) //Przepisane z Cormena
{
int sx,sxx,sq,si,sj,pom;
if(pocz<kon)
    {
     sx = drogi[kon][0];
     sxx = drogi[kon][1];
     si=pocz-1;
     for(sj=pocz;sj<=kon-1;sj++)
        {
         if((drogi[sj][0]<sx) || (( drogi[sj][0]==sx ) && ( drogi[sj][1]<=sxx )))
            {
             si++;
             pom=drogi[si][0]; drogi[si][0]=drogi[sj][0]; drogi[sj][0]=pom;
             pom=drogi[si][1]; drogi[si][1]=drogi[sj][1]; drogi[sj][1]=pom;
            }
        }
     pom=drogi[si+1][0]; drogi[si+1][0]=drogi[kon][0]; drogi[kon][0]=pom;
     pom=drogi[si+1][1]; drogi[si+1][1]=drogi[kon][1]; drogi[kon][1]=pom;
     sq=si+1;
     SORT_drogi(pocz,sq-1);
     SORT_drogi(sq+1,kon);
    }
return 0;
}

/*
int SORT_ilosci(int pocz,int kon) //Przepisane z Cormena
{
int sx,sxx,sq,si,sj,pom;
if(pocz<kon)
    {
     sx = ilosci[kon][0];
     sxx = ilosci[kon][1];
     si=pocz-1;
     for(sj=pocz;sj<=kon-1;sj++)
        {
         if((ilosci[sj][0]<sx) || (( ilosci[sj][0]==sx ) && ( ilosci[sj][1]<=sxx )))
            {
             si++;
             pom=ilosci[si][0]; ilosci[si][0]=ilosci[sj][0]; ilosci[sj][0]=pom;
             pom=ilosci[si][1]; ilosci[si][1]=ilosci[sj][1]; ilosci[sj][1]=pom;
            }
        }
     pom=ilosci[si+1][0]; ilosci[si+1][0]=ilosci[kon][0]; ilosci[kon][0]=pom;
     pom=ilosci[si+1][1]; ilosci[si+1][1]=ilosci[kon][1]; ilosci[kon][1]=pom;
     sq=si+1;
     SORT_ilosci(pocz,sq-1);
     SORT_ilosci(sq+1,kon);
    }
return 0;
}*/




int main()
{
scanf("%ld %ld %ld",&N,&m,&D);

for (int i=1; i<=N; i++)
	{
	ilosci[i][0]=i;
	ilosci[i][1]=0;
	}

for (int i=1;i<=m;i++)
	{
	scanf("%ld %ld",&a,&b);
	drogi[2*i-1][0]=a;
	drogi[2*i-1][1]=b;
	drogi[2*i][0]=b;
	drogi[2*i][1]=a;
	ilosci[a][1]++;
	ilosci[b][1]++;
	}
//printf("ilosci:\n");
//for (int i=1; i<=N; i++) printf("%ld %ld\n",ilosci[i][0],ilosci[i][1]);

SORT_drogi(1,2*m);

wskaz_pocz[1]=1;
for (int i=2; i<=N; i++)
	{
	wskaz_pocz[i]=wskaz_pocz[i-1]+ilosci[i-1][1];
	}
wskaz_pocz[N+1]=wskaz_pocz[N]+ilosci[N][1];

//SORT_ilosci(1,N);

//for (int i=1; i<=2*m; i++) printf("%ld %ld\n",drogi[i][0],drogi[i][1]);
//printf("ilosci:\n");
//for (int i=1; i<=N; i++) printf("%ld %ld\n",ilosci[i][0],ilosci[i][1]);
//printf("wskaz_pocz:\n");
//for (int i=1; i<=N+1; i++) printf("%ld -> %ld\n",i,wskaz_pocz[i]);


wsk_pierwszy=1;
wsk_ostatni=0;
for (int i=1; i<=N+1; i++) if (ilosci[i][1]<D) 
	{
	wsk_ostatni++;
	do_sprawdzenia[wsk_ostatni]=i;
	}

while (wsk_pierwszy<=wsk_ostatni)
	{
	if ( (ilosci[ do_sprawdzenia[wsk_pierwszy] ][1]<D) && (ilosci[ do_sprawdzenia[wsk_pierwszy] ][1]>0) )
		{
		miasto = do_sprawdzenia[wsk_pierwszy];
		//printf("Zeruje miasto %ld\n",miasto); /////////////////////////
		
		ilosci[miasto][1]=0;
		for (int i=wskaz_pocz[miasto]; i<wskaz_pocz[miasto+1]; i++)
			{
			wsk_ostatni++;
			do_sprawdzenia[wsk_ostatni]=drogi[i][1];
			ilosci[ drogi[i][1] ][1]--;
			}
		}
	
	wsk_pierwszy++;
	}


//printf("WYNIK:\n"); //////////////////////////////////////////////////////

int SUMA=0;
for (int i=1; i<=N; i++) if (ilosci[i][1]>0) SUMA++;
if (SUMA>0)
	{
	printf("%ld\n",SUMA);
	for (int i=1; i<=N; i++) if (ilosci[i][1]>0) printf("%ld ",i);
	}
else printf("NIE");


return 0;
}
