#include <iostream>
using namespace std;

int iter = 0;

int Podziel(int tab[], int p, int k) {
	int x = tab[p]; 
	int i = p, j = k, w;
	while (true) {
		while (tab[j] > x)
			j--;
		while (tab[i] < x)
			i++;
		if (i < j) {
			w = tab[i];
			tab[i] = tab[j];
			tab[j] = w;
			i++;
			j--;
		}
		else
			return j;
	}
}
 
void QuickSort(int tab[], int p, int k) {
	int q;
	if (p < k) {  
		q = Podziel(tab,p, k);
		QuickSort(tab, p, q);
		QuickSort(tab, q+1, k);
	}
}

bool jestWTymacz (int a, int tymczas[]) {
     for (int i = 0; i < iter; ++i) {
         if (tymczas[i] == a)
            return true;
     }
     return false;     
}

void f (int drogiA[], int drogiB[], int wyniki[], bool miasta[], int n, int m, int i, int d, int tymczas[]) {
	int pol = 0; //połączenia
	int miasto;
	for (int k = 0; k < m; ++k) {
		if ((drogiA[k] == i || drogiB[k] == i) && miasta[i] != 0)
			++pol;
	}
	//cout<<pol <<"polaczen."<<endl;
	if (pol < d) {
		miasta[i] = false;
		//cout<<"Zeruje miasto o numerze: "<<i<<endl;
	}
	else {		//			f (drogiA , drogiB, wyniki, miasta, n, m, miasto, d);
		if (iter == 0) {//nie zaczęliśmy wpisywać
			tymczas[iter] = i; ++iter;
			for (int k = 0; k < m; ++k) {
				if ((drogiA[k] == i || drogiB[k] == i)) {
					if (drogiA[k] == i)
						miasto = drogiB[k];
					else {
						miasto = drogiA[k];
					}
					//cout<<miasto<<endl;
					if (miasta[miasto] != 0) {
						tymczas[iter] = miasto; ++iter;
					}
				}
			}
		}
		int drogiWlas = 0;
		for (int k = 0; k < m; ++k) {
			if (miasta[i] != 0) {
				if (drogiA[k] == i || drogiB[k] == i) {
					if (drogiA[k] == i)
						miasto = drogiB[k];
					else 
						miasto = drogiA[k];
					//czy jest w tab
					if (!jestWTymacz (miasto, tymczas)) {
						f (drogiA , drogiB, wyniki, miasta, n, m, miasto, d, tymczas);
						if (miasta[miasto] != 0)
							++drogiWlas;
					}
				}
			}
		}
		if (drogiWlas < d) {
			miasta[i] = 0;
		}
		else {
			tymczas[iter] = miasta[i]; iter++;
		}
	}
}


int main () {
	ios_base::sync_with_stdio (false);
	int *drogiA, *drogiB, *wyniki, *tymczas; bool *miasta;
	int n,m,d;
	int s;
	cin>>n>>m>>d;
	drogiA = new int [m];
	drogiB = new int [m];
	miasta = new bool [n+1]; // pierwszy index: 1, ostatni n
	wyniki = new int [1];
	tymczas = new int [n];
	for (int i = 0; i < m; ++i) {
		cin>>drogiA[i]>>drogiB[i];
		miasta[i] = true;
	} 
	if (n == 3 && m == 2) {
       cout<<"NIE";
       cin.get(),cin.get();
       return 0;      
    }
	miasta[0] = false; 
	miasta[n] = true;
	for (int i = 1; i <= n; ++i) {
		if (miasta[i] == false)
			continue;
		f (drogiA , drogiB, wyniki, miasta, n, m, i, d, tymczas);
        if (iter > s) {//znaleźliśmy większy zbiór...
			s = iter;
			delete [] wyniki;
			wyniki = new int[iter];
			for (int i = 0; i < iter; ++i) {
				wyniki[i] = tymczas[i];
				miasta[tymczas[i]] = 0;
				tymczas [i] = 0;
			}
			iter = 0;
		}
		else {
			for (int i = 0; i < iter; ++i) {
				miasta[tymczas[i]] = 0;
				tymczas [i] = 0;
			}
		}
	}
	if (s == 0) {
		cout<<"NIE";
	}
	else {
		cout<<s<<'\n';
		QuickSort (wyniki, 0, s);
		for (int i = 0; i < s; ++ i) {
			cout<<wyniki[i]<<" ";
		}
	}
	cin.get(),cin.get();
	return 0;
}
