#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e3 + 10;
int n;
int a, b, c, d;
vector<int> g[MAXN];
bool read() {
  if (scanf("%d", &n) < 1) {
    return 0;
  }
  for (int i = 0; i < int(n); ++i) {
    g[i].clear();
  }
  scanf("%d%d%d%d", &a, &b, &c, &d);
  --a;
  --b;
  --c;
  --d;
  for (int i = 1; i < n; ++i) {
    int p;
    scanf("%d", &p);
    --p;
    g[p].push_back(i);
  }
  return 1;
}
void get(int v, vector<int>& vs) {
  if (g[v].empty()) {
    vs.push_back(v);
    return;
  }
  for (int to : g[v]) {
    get(to, vs);
  }
}
int cnt[MAXN];
int A, B, C, D;
bool dp[2][MAXN];
bool in(const vector<int>& vs, int x) {
  int pos = lower_bound(begin(vs), end(vs), x) - vs.begin();
  return pos < ((int)(vs).size()) && vs[pos] == x;
}
bool solve() {
  memset(cnt, 0, sizeof cnt);
  const int r = 0;
  int all = 0;
  A = B = C = D = -1;
  for (int to : g[r]) {
    vector<int> vs;
    get(to, vs);
    sort(begin(vs), end(vs));
    if (in(vs, a)) {
      A = ((int)(vs).size());
    } else if (in(vs, b)) {
      B = ((int)(vs).size());
    } else if (in(vs, c)) {
      C = ((int)(vs).size());
    } else if (in(vs, d)) {
      D = ((int)(vs).size());
    }
    ++cnt[((int)(vs).size())];
    all += ((int)(vs).size());
  }
  assert(A != -1 && B != -1 && C != -1 && D != -1);
  --cnt[A];
  --cnt[B];
  memset(dp, 0, sizeof dp);
  int id = 0;
  dp[id][0] = 1;
  for (int w = 1; w < n; ++w) {
    if (!cnt[w]) {
      continue;
    }
    memset(dp[id ^ 1], 0, sizeof dp[id ^ 1]);
    for (int take = (w == C) ? 1 : 0; take <= cnt[w]; ++take) {
      for (int have = 0; have < int(n + 1); ++have) {
        if (!dp[id][have]) {
          continue;
        }
        if (have + take * w < MAXN) {
          dp[id ^ 1][have + take * w] = 1;
        }
      }
    }
    id ^= 1;
  }
  if (all & 1) {
    return 0;
  }
  int between = (all - 2) / 2;
  bool ok = 0;
  for (int x = 0; x < int(n + 1); ++x) {
    if (dp[id][x] && x <= between && between <= x + A + B - 2) {
      int rr = all - A - B - x;
      for (int ww = 0; ww < int(x); ++ww) {
        int left_________________ = ww + B;
        int right_______________ = ww + B + rr - 1;
        if (left_________________ <= between &&
            between <= right_______________) {
          return 1;
        }
      }
    }
  }
  return 0;
}
int main() {
  while (read()) {
    puts(solve() ? "YES" : "NO");
  }
  return 0;
}
