#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target(sse, sse1, sse2, tune = native, popcnt)
using namespace std;
const long long inf = 1e17 + 47, MAXN = 5e5 + 47, mod = 1e9 + 7, N = 201;
mt19937 rnd(time(0));
struct node {
  long long l, r, dw, mn;
  node() {
    l = r = -1;
    dw = 0;
    mn = inf;
  }
};
vector<node> t(4 * MAXN);
void build(long long i, long long l, long long r) {
  t[i].l = l, t[i].r = r;
  if (l == r) {
    return;
  }
  long long mid = (l + r) / 2;
  build(i * 2, l, mid);
  build(i * 2 + 1, mid + 1, r);
}
void push(long long i) {
  if (t[i].l != t[i].r) {
    t[i * 2].dw += t[i].dw;
    t[i * 2 + 1].dw += t[i].dw;
  }
  t[i].mn += t[i].dw;
  t[i].dw = 0;
}
void update(long long i, long long l, long long r, long long add) {
  push(i);
  if (t[i].l > r || t[i].r < l) return;
  if (l <= t[i].l && t[i].r <= r) {
    t[i].dw += add;
    push(i);
    return;
  }
  update(i * 2, l, r, add);
  update(i * 2 + 1, l, r, add);
}
long long get(long long i, long long pos) {
  push(i);
  if (t[i].l > pos || pos > t[i].r) return inf;
  if (t[i].l == pos && t[i].r == pos) return t[i].mn;
  return min(get(i * 2, pos), get(i * 2 + 1, pos));
}
void eshkere(long long i, long long pos, long long a) {
  push(i);
  if (t[i].l > pos || pos > t[i].r) return;
  if (t[i].l == pos && t[i].r == pos) {
    t[i].mn = min(t[i].mn, a);
    return;
  }
  eshkere(i * 2, pos, a);
  eshkere(i * 2 + 1, pos, a);
}
void print(long long i) {
  push(i);
  if (t[i].l == t[i].r)
    cout << t[i].mn << " ";
  else
    print(i * 2), print(i * 2 + 1);
}
long long n, m;
vector<long long> a, p, b;
unordered_map<long long, long long> ind;
void solve() {
  cin >> n;
  a.resize(n), p.resize(n);
  for (long long i = 0; i < n; ++i) cin >> a[i];
  for (long long i = 0; i < n; ++i) cin >> p[i];
  cin >> m;
  b.resize(m);
  for (long long i = 0; i < m; ++i) {
    cin >> b[i];
    ind[b[i]] = i;
  }
  vector<long long> temp(m + 1, inf);
  temp[0] = 0;
  long long UK = 0;
  build(1, 0, m);
  eshkere(1, 0, 0);
  for (long long i = 0; i < n; ++i) {
    long long t = inf;
    if (ind.find(a[i]) != ind.end()) {
      t = get(1, ind[a[i]]);
    }
    if (p[i] < 0) {
      update(1, 0, UK, p[i]);
    } else {
      long long ind =
          (long long)(lower_bound(b.begin(), b.end(), a[i]) - b.begin());
      ind = min(ind, UK);
      update(1, 0, ind, p[i]);
    }
    if (ind.find(a[i]) != ind.end()) {
      if (UK >= ind[a[i]]) {
        eshkere(1, ind[a[i]] + 1, t);
        UK = max(UK, ind[a[i]] + 1);
      }
    }
  }
  long long t = get(1, m);
  if (t == inf)
    cout << "NO" << endl;
  else
    cout << "YES" << endl << t << endl;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  long long t = 1;
  while (t--) {
    solve();
  }
}
