#include <bits/stdc++.h>
using namespace std;
const long long N = 1000777;
long long n, m;
long long a[N];
long long p[N];
long long b[N];
long long t[4 * N];
long long t2[4 * N];
map<long long, long long> mp;
long long nl = 0;
void build(long long v, long long tl, long long tr) {
  if (tl == tr) {
    t[v] = p[tl];
  } else {
    long long tm = (tl + tr) / 2;
    build(v * 2, tl, tm);
    build(v * 2 + 1, tm + 1, tr);
    t[v] = t[v * 2] + t[v * 2 + 1];
  }
}
void update(long long v, long long tl, long long tr, long long pos,
            long long x) {
  if (tl > tr) {
    return;
  }
  if (tl == tr) {
    t[v] = x;
  } else {
    long long tm = (tl + tr) / 2;
    if (pos <= tm) {
      update(v * 2, tl, tm, pos, x);
    } else {
      update(v * 2 + 1, tm + 1, tr, pos, x);
    }
    t[v] = t[v * 2] + t[v * 2 + 1];
  }
}
long long get(long long v, long long tl, long long tr, long long l,
              long long r) {
  if (tl > tr) {
    return 0;
  }
  if (l > r) {
    return 0;
  }
  if (l == tl && r == tr) {
    return t[v];
  } else {
    long long tm = (tl + tr) / 2;
    return get(v * 2, tl, tm, l, min(r, tm)) +
           get(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
  }
}
bool check() {
  long long j = 1;
  for (long long i = 1; i <= n; i++) {
    if (a[i] == b[j]) {
      j++;
      if (j == m + 1) {
        return 1;
      }
    }
  }
  return 0;
}
vector<long long> g[N];
long long ans = 1e18;
long long inf = 1e18;
long long otv[N];
set<long long> st;
map<long long, long long> to;
long long from[N];
long long sz = 0;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    st.insert(a[i]);
  }
  for (long long i = 1; i <= n; i++) {
    cin >> p[i];
  }
  cin >> m;
  for (long long i = 1; i <= m; i++) {
    cin >> b[i];
  }
  for (long long i = 1; i <= n; i++) {
    otv[i] = inf;
  }
  if (!check()) {
    cout << "NO"
         << "\n";
    return 0;
  }
  cout << "YES"
       << "\n";
  for (auto it = st.begin(); it != st.end(); it++) {
    long long x = *it;
    sz++;
    to[x] = sz;
    from[sz] = x;
  }
  for (long long i = 1; i <= n; i++) {
    a[i] = to[a[i]];
  }
  for (long long i = 1; i <= m; i++) {
    b[i] = to[b[i]];
  }
  for (long long i = 1; i <= n; i++) {
    g[a[i]].push_back(i);
  }
  long long j = 1;
  build(1, 1, n);
  for (long long i = 1; i <= b[m]; i++) {
    long long k = 0;
    long long sum = 1e18;
    if (i == b[j]) {
      if (j == 1) {
        for (long long ii = 0; ii < g[i].size(); ii++) {
          long long id = g[i][ii];
          otv[id] = get(1, 1, n, 1, id - 1);
        }
        for (long long ii = 0; ii < g[i].size(); ii++) {
          long long id = g[i][ii];
          if (p[id] > 0) {
            update(1, 1, n, id, 0);
          }
        }
        long long x = i - 1;
        while (x >= 1) {
          for (long long ii = 0; ii < g[x].size(); ii++) {
            long long id = g[x][ii];
            if (p[id] > 0) {
              update(1, 1, n, id, 0);
            }
          }
          x--;
        }
        j++;
        if (j == m + 1) {
          break;
        }
      } else {
        vector<pair<long long, long long> > vec;
        long long x = b[j - 1];
        long long y = i;
        for (long long ii = 0; ii < g[x].size(); ii++) {
          vec.push_back({g[x][ii], 1});
        }
        for (long long ii = 0; ii < g[y].size(); ii++) {
          vec.push_back({g[y][ii], 2});
        }
        sort(vec.begin(), vec.end());
        for (long long ii = 0; ii < vec.size(); ii++) {
          long long id = vec[ii].first;
          if (vec[ii].second == 1) {
            if (otv[id] == inf) {
              continue;
            }
            sum = min(sum + get(1, 1, n, k + 1, id), otv[id]);
            k = id;
          } else {
            if (k == 0) {
              continue;
            }
            otv[id] = sum + get(1, 1, n, k + 1, id - 1);
          }
        }
        while (x < y) {
          for (long long ii = 0; ii < g[y].size(); ii++) {
            long long id = g[y][ii];
            if (p[id] > 0) {
              update(1, 1, n, id, 0);
            }
          }
          y--;
        }
        j++;
        if (j == m + 1) {
          break;
        }
      }
    } else {
      continue;
    }
  }
  for (long long i = 0; i < g[b[m]].size(); i++) {
    long long id = g[b[m]][i];
    ans = min(ans, otv[id] + get(1, 1, n, id + 1, n));
  }
  cout << ans << "\n";
  return 0;
}
