#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 2;
int n, e[5], f[N], type[N];
vector<int> g[N];
void Dfs1(int u) {
  for (int i = 1; i <= 4; ++i)
    if (u == e[i]) type[u] = i;
  for (int v : g[u]) {
    Dfs1(v);
    type[u] = max(type[u], type[v]);
    f[u] += f[v];
  }
  if (!f[u]) f[u] = 1;
}
void Dfs2(int u, vector<int> &a) {
  if (!type[u])
    a.push_back(f[u]);
  else
    for (int v : g[u]) Dfs2(v, a);
}
void DP(vector<int> &a, vector<bool> &kt) {
  kt.resize(n);
  fill(kt.begin(), kt.end(), false);
  kt[0] = true;
  for (int x : a)
    for (int i = n - 1; i >= x; --i)
      if (kt[i - x] && !kt[i]) kt[i] = true;
}
bool Check(int sum, const vector<bool> &ktc, const vector<bool> &ktd,
           const vector<bool> &kt0) {
  if (sum < 0) return false;
  bool satis = false;
  for (int i = 0; i <= sum && !satis; ++i)
    for (int j = 0; i + j <= sum && !satis; ++j)
      if (ktc[i] && ktd[j] && kt0[sum - i - j]) satis = true;
  return satis;
}
bool Solve() {
  int sze[5];
  vector<int> a[5];
  vector<bool> kt[5];
  for (int v : g[1]) {
    Dfs1(v);
    f[1] += f[v];
    sze[type[v]] = f[v];
    Dfs2(v, a[type[v]]);
  }
  for (int i = 0; i < 5; ++i) DP(a[i], kt[i]);
  if (f[1] & 1) return false;
  bool chk1 = Check((f[1] - 4) / 2 - sze[3] + 1, kt[1], kt[3], kt[0]) &&
              Check((f[1] - 4) / 2 - sze[2] + 1, kt[2], kt[4], kt[0]);
  bool chk2 = Check((f[1] - 4) / 2 - sze[4] + 1, kt[1], kt[3], kt[0]) &&
              Check((f[1] - 4) / 2 - sze[2] + 1, kt[2], kt[4], kt[0]);
  return chk1 | chk2;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= 4; ++i) scanf("%d", &e[i]);
  for (int i = 2, p; i <= n; ++i) {
    scanf("%d", &p);
    g[p].push_back(i);
  }
  printf(Solve() ? "YES" : "NO");
  return 0;
}
