#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> P;
typedef pair<P ,ll> P3;
typedef pair<P ,P> PP;
const ll MOD = ll(1e9)+7;
const int IINF = INT_MAX;
const ll LLINF = LLONG_MAX;
const int MAX_N = int(1e5 + 5);
const double EPS = 1e-6;
const int di[] = {0, 1, 0, -1}, dj[] = {1, 0, -1, 0};
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define SORT(v) sort((v).begin(), (v).end())
#define SORTR(v) sort((v).rbegin(), (v).rend())
#define ALL(v) (v).begin(), (v).end()

typedef vector<int> vec;
typedef vector<vec> mat;

int n, m, z;

mat mul(mat &A, mat &B){
    mat C(A.size(), vec(B[0].size()));
    for(int i=0;i<int(A.size());i++){
        for(int k=0;k<int(B.size());k++){
            for(int j=0;j<int(B[0].size());j++){
                C[i][j] = (C[i][j] + A[i][k] * B[k][j]) > 0;
            }
        }
    }
    return C;
}

mat pow(mat A, ll x){
    mat B(A.size(), vec(A.size()));
    for(int i=0;i<int(A.size());i++){
        B[i][i] = 1;
    }
    while(x > 0){
        if(x & 1) B = mul(B,A);
        A = mul(A, A);
        x >>= 1;
    }
    return B;
}

int main() {
    while(cin >> n >> m >> z, n){
        int g[55][55]{};
        for(int i=0;i<m;i++){
            int s, d;
            cin >> s >> d;
            s--; d--;
            g[s][d] = 1;
            g[d][s] = 1;
        }
        mat A(n*n);

        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                for(int k=0;k<n;k++){
                    for(int l=0;l<n;l++){
                        if(j != k && i==l){
                            A[i*n+j].push_back(g[i][k]);
                        }
                        else{
                            A[i*n+j].push_back(0);
                        }
                    }
                }
            }
        }
        vec ls;
        for(int i=n-1;i>=0;i--){
            for(int j=n-1;j>=0;j--){
                if(i==0 && j==0)continue;
                if(g[i][j]==0){
                    A.erase(A.begin()+i*n+j);
                    for(auto &v : A){
                        v.erase(v.begin()+i*n+j);
                    }
                }
                else{
                    ls.push_back(i);
                }
            }
        }
        ls.push_back(0);
        reverse(ls.begin(), ls.end());
        /*
        for(auto v:A){
            for(auto i:v){
                cout << i << " ";
            }
            cout << endl;
        }
        */
        mat ans = pow(A, z);
        bool ok = false;
        for(int i=0;i<int(ans.size());i++){
            if(ls[i]==n-1 && ans[0][i]>0){
                ok = true;
            }
        }

        cout << (ok?"yes":"no") << endl;

    }
    return 0;
}
