#include long long int u[4003], v[4003]; long long int dist[2003][2]; long long int q[4003], left, right; int main() { long long int n, m, k; scanf("%lld %lld %lld", &n, &m, &k); long long int s, t; scanf("%lld %lld", &s, &t); s--; t--; long long int i, j, l; for (i = 0; i < m; i++) { scanf("%lld %lld", &u[i], &v[i]); u[i + m] = --v[i]; v[i + m] = --u[i]; } m *= 2; if (k % 2 > 0) { printf("Yes\n"); return 0; } long long int cnt = 0; for (i = 0; i < m; i++) { if (u[i] == s && v[i] != t) cnt++; if (u[i] == t && v[i] != s) cnt++; } if (cnt > 0) { printf("Yes\n"); return 0; } cnt = 0; for (i = 0; i < m; i++) if (u[i] == s && v[i] == t) cnt++; if (cnt == 0) { printf("No\n"); return 0; } for (i = 0; i < m - 1; i++) { if (u[i] > u[i + 1]) { u[i] ^= u[i + 1]; u[i + 1] ^= u[i]; u[i] ^= u[i + 1]; v[i] ^= v[i + 1]; v[i + 1] ^= v[i]; v[i] ^= v[i + 1]; if (i > 0) i -= 2; } } u[n] = -1; long long int min, mid, max; long long int min_odd_cycle = 2e18; for (l = 0; l < n; l++) { for (i = 0; i < n; i++) dist[i][0] = dist[i][1] = 1e18; dist[l][0] = 0; q[0] = 2 * l; left = 0; right = 1; while (left < right) { i = q[left]; left++; j = i % 2; i /= 2; min = -1; max = m; while (max - min > 1) { mid = (max + min) / 2; if (u[mid] < i) min = mid; else max = mid; } for (; u[max] == i; max++) { if (dist[v[max]][1 - j] > dist[i][j] + 1) { dist[v[max]][1 - j] = dist[i][j] + 1; q[right] = 2 * v[max] + 1 - j; right++; } } } for (i = 0; i < n; i++) if (min_odd_cycle > dist[i][0] + dist[i][1]) min_odd_cycle = dist[i][0] + dist[i][1]; } if (min_odd_cycle + 3 > k) printf("No\n"); else printf("Yes\n"); return 0; }