#include <iostream>
#include <vector>
#include <set>
using namespace std;
const int N = 1e5 + 5;
int n, m;
long long x;
vector<int> g[N];
int c[N];
long long f[N];
set<pair<int, int> > s;
int out[N];
vector<int> to[N];
void dfs(int u) {
c[u] = 1;
for (int v : g[u]) {
if (c[v] == 1) {
cout << "No" << '\n';
exit(0);
} else if (c[v] == 0) {
dfs(v);
}
}
c[u] = 2;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> x;
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
g[a].emplace_back(b);
to[b].emplace_back(a);
out[a]++;
}
for (int i = 1; i <= n; i++) {
if (c[i] == 0) {
dfs(i);
}
}
for (int i = 1; i <= n; i++) {
s.insert(make_pair(out[i], i));
}
while (!s.empty()) {
int u = s.begin()->second;
s.erase(s.begin());
f[u]++;
for (int v : to[u]) {
out[v]--;
f[v] += f[u];
}
for (int v : to[u]) {
s.erase(s.find(make_pair(out[v] + 1, v)));
s.insert(make_pair(out[v], v));
}
}
cout << (*max_element(f + 1, f + n + 1) > x ? "No" : "Yes") << '\n';
/*
long long sum = 0;
for (int i = 1; i <= n; i++) {
sum += f[i];
if (sum > x) {
cout << "No" << '\n';
return 0;
}
}
cout << "Yes" << '\n';
*/
return 0;
}