#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
int n, v[5], sz[N], l[N], type[N], F[N], leaf[N];
vector<int> p[N], temp, a[5], f[N];
bool ck1 = false, ck2 = false;
void DFS(int u) {
  int pos = 0;
  sz[u]++;
  for (int id = 0; id < p[u].size(); id++) {
    int v = p[u][id];
    DFS(v);
    sz[u] += sz[v];
    l[u] += l[v];
    type[u] = max(type[u], type[v]);
    if (type[v] > 0) pos = id;
  }
  if (p[u].size() == 0) {
    l[u] = 1;
    for (int i = 1; i <= 4; i++)
      if (v[i] == u) type[u] = i;
  } else
    swap(p[u][0], p[u][pos]);
  return;
}
void DFS1(int u) {
  f[u].resize(l[u] + 1);
  fill(f[u].begin(), f[u].end(), 0);
  int time = 0;
  for (int id = 0; id < p[u].size(); id++) {
    int v = p[u][id];
    if ((u == 1) && (!type[v])) {
      a[0].push_back(l[v]);
      continue;
    }
    DFS1(v);
    if (type[v] > 0) {
      time = l[v];
      for (int i = 0; i <= l[v]; i++) f[u][i] = f[v][i];
    } else {
      for (int i = 0; i <= time; i++) temp[i] = f[u][i];
      for (int i = 0; i <= time; i++)
        if (temp[i]) f[u][i + l[v]] = 1;
      time += l[v];
    }
    if (u == 1) {
      leaf[type[v]] = l[v];
      int pos = type[v];
      a[pos].resize(f[v].size());
      for (int i = 0; i < f[v].size(); i++) a[pos][i] = f[v][i];
    }
    f[v].clear();
  }
  if (p[u].size() == 0) f[u][1] = 1;
  return;
}
void dp() {
  F[0] = 1;
  if (a[0].size() == 0) return;
  fill(F + 1, F + n + 1, 0);
  F[a[0][0]] = 1;
  for (int i = 1; i < a[0].size(); i++) {
    for (int j = 1; j <= n; j++) temp[j] = F[j];
    for (int j = 1; j + a[0][i] <= n; j++)
      if (temp[j]) F[j + a[0][i]] = 1;
  }
  return;
}
bool check(int x, int y, int z) {
  if (l[1] % 2 == 1) return false;
  for (int i = 1; i < a[x].size(); i++)
    for (int j = 1; j < a[y].size(); j++)
      if (a[x][i] && a[y][j]) {
        int leafs = l[1] / 2 - (leaf[x] - i) - j - leaf[z];
        if (F[leafs]) return true;
      }
  return false;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= 4; i++) scanf("%d", &v[i]);
  for (int i = 2; i <= n; i++) {
    int x;
    scanf("%d", &x);
    p[x].push_back(i);
  }
  temp.resize(n + 1);
  DFS(1);
  DFS1(1);
  dp();
  ck1 = check(1, 2, 3) && (check(3, 4, 2));
  ck2 = check(1, 2, 4) && (check(3, 4, 2));
  if (ck1 || ck2)
    printf("YES");
  else
    printf("NO");
  return 0;
}
