#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > cima, baixo;
int grid_cima[5005], grid_baixo[5005], n;
int dep_cima[5005], pai_cima[5005];
int dep_baixo[5005], pai_baixo[5005];
int dp[1005][5][1005];
void go(int u, int p, int d, int *dep, int *pai, vector<vector<int> > &adj) {
  dep[u] = d;
  pai[u] = p;
  for (int v : adj[u])
    if (v != p) go(v, u, d + 1, dep, pai, adj);
}
int lca(int v, int u, int *dep, int *pai) {
  int copyu = u, copyv = v;
  if (dep[u] < dep[v]) swap(u, v);
  while (dep[u] != dep[v]) u = pai[u];
  if (u == v) return dep[copyv] - dep[u];
  while (u != v) {
    u = pai[u];
    v = pai[v];
  }
  return dep[copyv] - dep[u];
}
int solve(int pos, int flag, int last) {
  if (pos > n) return 0;
  if (dp[pos][flag][last] != -1) return dp[pos][flag][last];
  if (flag == 0) {
    int r1 = lca(grid_cima[pos], grid_cima[last], dep_cima, pai_cima);
    int r2 = lca(grid_baixo[pos], grid_baixo[pos - 1], dep_baixo, pai_baixo);
    int aux1 = solve(pos + 1, 1, pos - 1);
    int aux2 = solve(pos + 1, 0, last);
    return dp[pos][flag][last] = min(r1 + aux1, r2 + aux2);
  } else {
    int r1 = lca(grid_cima[pos], grid_cima[pos - 1], dep_cima, pai_cima);
    int r2 = lca(grid_baixo[pos], grid_baixo[last], dep_baixo, pai_baixo);
    int aux1 = solve(pos + 1, 1, last);
    int aux2 = solve(pos + 1, 0, pos - 1);
    return dp[pos][flag][last] = min(r1 + aux1, r2 + aux2);
  }
}
int main() {
  memset(dp, -1, sizeof dp);
  grid_baixo[0] = grid_cima[0] = 1;
  cin >> n;
  int a;
  cin >> a;
  cima.assign(a + 5, vector<int>());
  for (int i = 2; i <= a; i++) {
    int x;
    cin >> x;
    cima[i].push_back(x);
    cima[x].push_back(i);
  }
  for (int i = 1; i <= n; i++) cin >> grid_cima[i];
  int b;
  cin >> b;
  baixo.assign(b + 5, vector<int>());
  for (int i = 2; i <= b; i++) {
    int x;
    cin >> x;
    baixo[i].push_back(x);
    baixo[x].push_back(i);
  }
  for (int i = 1; i <= n; i++) cin >> grid_baixo[i];
  go(1, 0, 0, dep_cima, pai_cima, cima);
  go(1, 0, 0, dep_baixo, pai_baixo, baixo);
  cout << a + b - solve(1, 0, 0) - 2 << endl;
  return 0;
}
