#include using namespace std; typedef long long ll; //SCCかく struct SCC { int n; vector> g, rg; vector vs, cmp; vector used; SCC(int n) : n(n), g(n), rg(n), cmp(n), used(n) {} void add_edge(int from, int to) { g[from].push_back(to); rg[to].push_back(from); } void dfs(int v) { used[v] = true; for (int next : g[v]) if (!used[next]) dfs(next); vs.push_back(v); } void rdfs(int v, int k) { used[v] = true; cmp[v] = k; for (int next : rg[v]) if (!used[next]) rdfs(next, k); } int sol() { fill(used.begin(), used.end(), false); for (int v = 0; v < n; v++) if (!used[v]) dfs(v); fill(used.begin(), used.end(), false); int k = 0; reverse(vs.begin(), vs.end()); for (int v : vs) if (!used[v]) rdfs(v, k++); return k; } }; ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M, K; cin >> N >> M >> K; ll MOD = 1LL << K; SCC scc(N); vector> edges; for (int i = 0; i < M; i++) { int u, v; cin >> u >> v; u--; v--; scc.add_edge(u, v); edges.push_back({u, v}); } int num = scc.sol(); vector> X(num); for (int i = 0; i < N; i++) X[scc.cmp[i]].push_back(i); vector ok(N, false); vector q; ok[0] = true; q.push_back(0); for(int i=0; i<(int)q.size(); ++i){ for(int next : scc.g[q[i]]) if(!ok[next]){ ok[next] = true; q.push_back(next); } } vector dist(N, -1); vector A(num, 0); for (int i = 0; i < num; i++) { if (X[i].empty()) continue; int root = X[i][0]; dist[root] = 0; vector st = {root}; int top = 0; while(top < (int)st.size()){ int v = st[top++]; for(int next : scc.g[v]){ if(scc.cmp[next] != i) continue; if(dist[next] == -1){ dist[next] = dist[v] + 1; st.push_back(next); } else { ll d = abs(dist[next] - (dist[v] + 1)); A[i] = gcd(A[i], d); } } } } vector ok2(num, false); for (int i = 0; i < num; i++) { if (A[i] > 0 && A[i] % 2 != 0) { ok2[i] = true; } for (int v : X[i]) { for (int a : scc.rg[v]) { if (scc.cmp[a] != i && ok2[scc.cmp[a]]) { ok2[i] = true; } } } } for (int i = 0; i < N; i++) { if (ok[i] && !ok2[scc.cmp[i]]) { cout << "No" << endl; return 0; } } cout << "Yes" << endl; return 0; }