#include <iostream>
#include <queue>
using namespace std;

int trasa[200001][2];
int mm[200001]; //połączenie miasto -> inne miasta (informacja o tym, z iloma innymi miastami miasto jest powiązane)
int ild[200001];

int spow[200001]; //w jakim punkcie powm trzeba zacząć, żeby sprawdzić dla danego miasta, z jakimi jest powiązany
int powm[400002]; //informacja o tym, z jakimi miastami miasto jest powiązane
int wynik[200001]; //zawiera informacje o usunięciu, bądź pozostawieniu miasta

int main()
{
	ios_base::sync_with_stdio(0);

//Wczytywanie
	int n; //ilosc miast
	int m; //ilosc drog
	int d; //ile drog ma miec jedno miasto
	
	cin>>n;
	cin>>m;
	cin>>d;
	
	for(int i=0; i<m; i++)
	{
      cin>>trasa[i][0];
      cin>>trasa[i][1];
      
      mm[trasa[i][0] - 1]++;
      mm[trasa[i][1] - 1]++;
      ild[trasa[i][0] - 1]++;
      ild[trasa[i][1] - 1]++;
   }   

   spow[0] = 0;
   for(int i=1; i<n; i++)
	{
      spow[i] = spow[i-1] + mm[i-1];
   }
      
   for(int i=0; i<m; i++)
	{
      powm[spow[trasa[i][0] - 1]] = trasa[i][1];
      powm[spow[trasa[i][1] - 1]] = trasa[i][0];
      
      spow[trasa[i][0] - 1] += 1;
      spow[trasa[i][1] - 1] += 1;
   } 

//Usuwanie miast z za małą ilością dróg
   spow[0] = 0;
   for(int i=1; i<n; i++)
	{
      spow[i] = spow[i-1] + mm[i-1];
   }
   
   //tworzenie kolejki   
   queue <int> kolejka;
   
   for (int i=0; i<n; i++)
   {
      if (ild[i] < d)               //jeżeli ilość połączeń jest mniejsza od wymaganej liczby dróg...
      {
         wynik[i] = -1;
         kolejka.push(i+1);      //dodanie do kolejki, aby potem sprawdzić, z jakimi miastami jest powiązana
      }
      else
         wynik[i] = 0;
   }
   
   //obsługa kolejki
   int a, b;
   while (!kolejka.empty())
   {
        a = kolejka.front() - 1;
        for (int i=0; i<mm[a];i++)
        {
            b = powm[spow[a]+i] - 1; //indeks sprawdzanego miasta
            if (wynik[b] == 0)
            {
               ild[b]--; 
               if (ild[b] < d)
               {
                  wynik[b] = -1;
                  kolejka.push(b+1);
               }
            }
        }       
        kolejka.pop();
   }
   
//Łączenie w zbiory
   int maxEl = 0;
   int maxZb = 0;
   
   for (int i=0; i<n; i++)
   {
      if (wynik[i] == 0)
      {
         wynik[i] = i+1;
         kolejka.push(i+1);
         
         int akEl = 1;
         
         while (!kolejka.empty())
         {
            a = kolejka.front() - 1;
            for (int j=0; j<mm[a];j++)
            {
               b = powm[spow[a]+j] - 1; //indeks sprawdzanego miasta
               if (wynik[b] == 0)
               {
                  wynik[b] = i+1;
                  kolejka.push(b+1);
                  akEl++;
               }
            }       
            kolejka.pop();
         }
         
         if(maxEl < akEl)
         {
            maxEl = akEl;
            maxZb = i+1;
         }
      }
   }

//Wypisywanie
   if (maxEl == 0)
      cout<<"NIE";
   else
   {
      cout<<maxEl<<endl;
      
      for (int i=0; i<n; i++)
      {
         if (wynik[i] == maxZb)
            cout<<i+1<<" ";
      }
   }
}
