#include <bits/stdc++.h>
using namespace std;
int n;
int ide[5001];
vector<int> nxt[5001];
int h, a[5];
int sz[5002], par[5], dp[5001][5];
int ok = 0;
int tot[5001];
int DFS(int u, int p) {
  tot[u] = 0;
  int w = 1;
  for (int j = 0; j < nxt[u].size(); j++)
    if (nxt[u][j] != p) {
      tot[u] += DFS(nxt[u][j], u);
      w = 0;
    }
  tot[u] += w;
  for (int j = 1; j <= 4; j++)
    if (a[j] == u) {
      ok = j;
    }
  return tot[u];
}
int zz, b[5001];
int DFS2(int u, int p, int id) {
  int ww = 0;
  for (int j = 0; j < nxt[u].size(); j++) {
    if (nxt[u][j] != p) {
      int ret = DFS2(nxt[u][j], u, id);
      if (ret || nxt[u][j] == a[id]) {
        ww = 1;
      } else {
        b[++zz] = tot[nxt[u][j]];
      }
    }
  }
  return ww;
}
int possible[5002][5];
void construct(int t) {
  zz = 0;
  DFS2(par[t], 1, t);
  possible[1][t] = 1;
  for (int i = 1; i <= zz; i++) {
    for (int j = n - b[i]; j >= 0; j--)
      if (possible[j][t]) possible[j + b[i]][t] = 1;
  }
}
int rr = 0, z;
int dp2[5002][3];
void beat(int a, int b, int u) {
  for (int i = 1; i <= 5000; i++)
    for (int j = 1; j <= 5000; j++) {
      if (possible[i][a] && possible[j][b]) {
        if (tot[par[a]] - i + j <= z / 2) {
          int remain = z / 2 - tot[par[a]] + i - j;
          if (remain >= 0) dp2[remain][u] = 1;
        }
      }
    }
}
int dp3[30002];
void solve(int a, int b, int c, int d) {
  beat(a, c, 1);
  beat(b, d, 2);
  memset(dp3, 0, sizeof(dp3));
  dp3[0] = 1;
  for (int i = 1; i <= h; i++)
    for (int j = 5000 - sz[i]; j >= 0; j--)
      if (dp3[j]) dp3[j + sz[i]] = 1;
  for (int i = tot[par[b]]; i <= 5000; i++)
    for (int j = tot[par[c]]; j <= 5000; j++)
      if (dp3[i - tot[par[b]]] && dp3[j - tot[par[c]]] && dp2[i][1] &&
          dp2[j][2]) {
        rr = 1;
      }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= 4; i++) scanf("%d", &a[i]);
  for (int i = 2; i <= n; i++) {
    int p;
    scanf("%d", &p);
    nxt[p].push_back(i);
  }
  for (int i = 0; i < nxt[1].size(); i++) {
    ok = 0;
    int sol = DFS(nxt[1][i], 1);
    if (!ok)
      sz[++h] = sol;
    else {
      par[ok] = nxt[1][i];
    }
    z += sol;
  }
  if (z % 2 == 1) {
    puts("NO");
    return 0;
  }
  for (int i = 1; i <= 4; i++) construct(i);
  solve(1, 3, 2, 4);
  solve(2, 3, 1, 4);
  if (rr)
    puts("YES");
  else
    puts("NO");
}
