#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5100;
vector<int> v[MAXN];
int sz[MAXN], fl[MAXN], dp[MAXN][MAXN / 2];
vector<int> th;
int n, a, b, c, d;
void dfs(int node, int p) {
  if (node == a)
    fl[node] = 1;
  else if (node == b)
    fl[node] = 2;
  else if (node == c)
    fl[node] = 3;
  else if (node == d)
    fl[node] = 4;
  for (int i = 0; i < v[node].size(); i++) {
    int to = v[node][i];
    if (to != p) {
      dfs(to, node);
      if (fl[to] != 0) fl[node] = fl[to];
      sz[node] += sz[to];
    }
  }
  if (v[node].size() == 1) sz[node] = 1;
}
void findThings(int node, int p) {
  for (int i = 0; i < v[node].size(); i++) {
    int to = v[node][i];
    if (fl[to] == 0) {
      th.push_back(sz[to]);
    } else if (to != p)
      findThings(to, node);
  }
}
bool pack(int nd) {
  memset(dp, 0, sizeof(dp));
  if (nd == 0) return true;
  for (int i = 1; i <= th.size(); i++) {
    for (int j = 1; j <= nd; j++) {
      dp[i][j] = dp[i - 1][j];
      int c = th[i - 1];
      if (c > j) continue;
      dp[i][j] = max(dp[i][j], dp[i - 1][j - c] + c);
    }
    if (dp[i][nd] == nd) return true;
  }
  return false;
}
int main() {
#pragma warning(disable : 4996)
  scanf("%d%d%d%d%d", &n, &a, &b, &c, &d);
  a--;
  b--;
  c--;
  d--;
  for (int i = 1; i < n; i++) {
    int a;
    scanf("%d", &a);
    a--;
    v[i].push_back(a);
    v[a].push_back(i);
  }
  dfs(0, -1);
  if (sz[0] % 2 == 1) {
    printf("NO");
    return 0;
  }
  int nd = sz[0] / 2 - 1;
  for (int i = 0; i < v[0].size(); i++) {
    int to = v[0][i];
    if (fl[to] == 1) {
      findThings(to, 0);
    } else if (fl[to] == 2) {
      findThings(to, 0);
    } else if (fl[to] == 3) {
      nd -= sz[to];
    } else if (fl[to] == 0) {
      th.push_back(sz[to]);
    }
  }
  if (!pack(nd)) {
    printf("NO");
    return 0;
  }
  th.clear();
  nd = sz[0] / 2 - 1;
  for (int i = 0; i < v[0].size(); i++) {
    int to = v[0][i];
    if (fl[to] == 3) {
      findThings(to, 0);
    } else if (fl[to] == 4) {
      findThings(to, 0);
    } else if (fl[to] == 2) {
      nd -= sz[to];
    } else if (fl[to] == 0) {
      th.push_back(sz[to]);
    }
  }
  if (!pack(nd)) {
    printf("NO");
    return 0;
  }
  printf("YES");
  return 0;
}
