#include <iostream> #include <cstring> #include <cstdio> #include <map> #define ll long long using namespace std; const int xx[4] = {0, 1, 1, 1} , yy[4] = {1, -1, 0, 1}; int n, m, k, xt, yt, sz, ans[1005]; ll bin[15], bg, ed; bool mp[10][10]; map < ll, int > q; void add(int x1, int y1, int x2, int y2){ x1 = (x1 + 3) % 3; x2 = (x2 + 3) % 3; y1 = (y1 + 3) % 3; y2 = (y2 + 3) % 3; int u = x1 * 3+y1, v = x2 * 3+y2; mp[u][v] = 1; } void pre(){ int a1, a2, b1, b2; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) for (int k = 0; k < 4; k++){ a1 = i + xx[k], b1 = j + yy[k]; a2 = a1 + xx[k], b2 = b1 + yy[k]; if (a2 + xx[k] < n && b2 + yy[k] < m) add(i, j, a2, b2); if (a2 < n && b2 < m) add(i, j, a1, b1); } } int dfs(ll x){ if (x == ed) return 1; int a, b, a1, a2, b1, b2, t; if (q[x]) t = q[x]; else t = q[x] = ++sz; if (ans[t]) return ans[t]; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++){ int t = i * 3+j; if (x / bin[t] % 11) for (int k = 0; k < 4; k++){ a1 = (i + xx[k] + 3) % 3, b1 = (j + yy[k] + 3) % 3; a2 = (a1 + xx[k] + 3) % 3, b2 = (b1 + yy[k] + 3) % 3; a = a1 * 3+b1, b = a2 * 3+b2; if ((x / bin[a] % 11) && mp[t][a]) if (dfs(x - bin[t] - bin[a] + bin[b]) == 1) return ans[t] = 1; if ((x / bin[b] % 11) && mp[t][b]) if (dfs(x - bin[t] - bin[b] + bin[a]) == 1) return ans[t] = 1; } } return ans[t] = - 1; } int main(){ bin[0] = 1; for (int i = 1; i <= 10; i++) bin[i] = bin[i - 1] *11; while (scanf("%d%d%d%d%d", &k, &n, &m, &xt, &yt) != EOF){ q.clear(); sz = bg = 0; memset(ans, 0, sizeof(ans)); memset(mp, 0, sizeof(mp)); pre(); xt = (xt + 2) % 3; yt = (yt + 2) % 3; ed = bin[xt *3+yt]; int x, y, v; for (int i = 1; i <= k; i++){ scanf("%d%d", &x, &y); x = (x + 2) % 3; y = (y + 2) % 3; v = x * 3+y; bg += bin[v]; } if (dfs(bg) == 1) puts("Yes"); else puts("No"); } return 0; }