#include<cstdio>
#include<cstdlib>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

typedef long long ll;

struct edge{ int u,v; };

const int N_MAX=101;

template<class T>
void mul(int n,const T A[N_MAX][N_MAX],const T B[N_MAX][N_MAX],T C[N_MAX][N_MAX]){
	static T tmp[N_MAX][N_MAX];
	rep(i,n) rep(j,n) {
		tmp[i][j]=0;
		rep(k,n) tmp[i][j]+=A[i][k]*B[k][j];
	}
	rep(i,n) rep(j,n) C[i][j]=tmp[i][j];
}

template<class T>
void pow(int n,const T A[N_MAX][N_MAX],ll m,T B[N_MAX][N_MAX]){
	static T tmp[N_MAX][N_MAX];
	rep(i,n) rep(j,n) {
		tmp[i][j]=A[i][j];
		B[i][j]=(i==j?1:0);
	}
	for(int t=0;m>0;t++){
		if(m&(1LL<<t)){
			mul(n,B,tmp,B);
			m-=1LL<<t;
		}
		mul(n,tmp,tmp,tmp);
	}
}

template<class T>
void mul(int n,const T A[N_MAX][N_MAX],const T x[N_MAX],T y[N_MAX]){
	static T z[N_MAX];
	rep(i,n){
		z[i]=0;
		rep(j,n) z[i]+=A[i][j]*x[j];
	}
	rep(i,n) y[i]=z[i];
}

int main(){
	for(int n,m,z;scanf("%d%d%d",&n,&m,&z),n;){
		edge e[100];
		rep(i,m){
			scanf("%d%d",&e[i].u,&e[i].v), e[i].u--, e[i].v--;
			e[m+i]=(edge){e[i].v,e[i].u};
		}
		m*=2;

		bool A[101][101]={};
		rep(i,m){
			rep(j,m) if(abs(i-j)!=m/2 && e[i].v==e[j].u) A[j][i]=true;
			if(e[i].u==0) A[i][m]=true;
		}
		pow(m+1,A,z,A);

		bool x[101]={}; x[m]=true;
		mul(m+1,A,x,x);

		bool ok=false;
		rep(i,m+1) if(e[i].v==n-1 && x[i]) ok=true;
		puts(ok?"yes":"no");
	}

	return 0;
}