#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-O2")
using namespace std;
const long long N = 500000 + 10;
const long long MOD = 1000000000 + 7;
const long long INF = 100000000000000010;
const long long LOG = 25;
long long dp[N], n, a[N], lazy[N << 2], m, b[N], seg[N << 2], p[N], koj[N];
void modify(long long id, long long x) {
  seg[id] += x;
  lazy[id] += x;
}
void shift(long long id) {
  modify(id << 1, lazy[id]);
  modify(id << 1 | 1, lazy[id]);
  lazy[id] = 0;
}
void add(long long id, long long lq, long long rq, long long x, long long l,
         long long r) {
  if (rq <= l || r <= lq) return;
  if (lq <= l && r <= rq) {
    modify(id, x);
    return;
  }
  long long md = (l + r) >> 1;
  shift(id);
  add(id << 1, lq, rq, x, l, md);
  add(id << 1 | 1, lq, rq, x, md, r);
  seg[id] = seg[id << 1] + seg[id << 1 | 1];
}
long long get(long long id, long long lq, long long rq, long long l,
              long long r) {
  if (rq <= l || r <= lq) return 0;
  if (lq <= l && r <= rq) return seg[id];
  shift(id);
  long long md = (l + r) >> 1;
  return get(id << 1, lq, rq, l, md) + get(id << 1 | 1, lq, rq, md, r);
}
void Set(long long id, long long lq, long long rq, long long x, long long l,
         long long r) {
  if (rq <= l || r <= lq) return;
  if (lq <= l && r <= rq) {
    seg[id] = x;
    return;
  }
  long long md = (l + r) >> 1;
  shift(id);
  Set(id << 1, lq, rq, x, l, md);
  Set(id << 1 | 1, lq, rq, x, md, r);
  seg[id] = seg[id << 1] + seg[id << 1 | 1];
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> 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];
    koj[b[i]] = i;
  }
  add(1, 1, m + 1, INF, 0, m + 1);
  for (long long i = 1; i <= n; i++) {
    if (koj[a[i]] == 0) {
      long long x = lower_bound(b + 1, b + m + 1, a[i]) - b;
      add(1, 0, x, p[i], 0, m + 1);
      long long zed = min(0ll, p[i]);
      add(1, x, m + 1, zed, 0, m + 1);
    } else {
      long long j = koj[a[i]];
      long long zed = min(0ll, p[i]);
      long long mn =
          min(get(1, j - 1, j, 0, m + 1), get(1, j, j + 1, 0, m + 1) + zed);
      Set(1, j, j + 1, mn, 0, m + 1);
      add(1, 0, j, p[i], 0, m + 1);
      add(1, j + 1, m + 1, zed, 0, m + 1);
    }
  }
  long long ans = get(1, m, m + 1, 0, m + 1);
  if (ans > 1000000000000000) return cout << "NO", 0;
  cout << "YES\n";
  cout << ans;
  return 0;
}
