#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x1f3f3f3f3f3f3f3f, mod = 1000000007,
                inf2 = 0x3f3f3f3f3f3f3f3f;
const double pi = 3.1415926535897932, eps = 1e-6;
void chmax(int &x, int y) {
  if (x < y) x = y;
}
void chmin(int &x, int y) {
  if (x > y) x = y;
}
long long n, m;
long long a[500005], b[500005], c[500005], tb[500005];
map<long long, int> mp, mp2;
struct segtree {
  long long dat[1048580], add[1048580], n;
  void build(int nn) {
    n = 1;
    while (n <= nn) n <<= 1;
  }
  void update(int a, int b, long long x) { update(0, 0, n, a, b + 1, x); }
  long long update(int k, int l, int r, int a, int b, long long x) {
    if (r <= a || b <= l) return dat[k] + add[k];
    if (a <= l && r <= b) {
      add[k] += x;
      return dat[k] + add[k];
    }
    dat[k] = min(update((k << 1) + 1, l, (l + r) >> 1, a, b, x),
                 update((k << 1) + 2, (l + r) >> 1, r, a, b, x));
    return dat[k] + add[k];
  }
  long long query(int l, int r) { return query(l, r + 1, 0, 0, n); }
  long long query(int a, int b, int k, int l, int r) {
    if (r <= a || b <= l) return inf2;
    if (a <= l && r <= b) return dat[k] + add[k];
    return min(query(a, b, (k << 1) + 1, l, (l + r) >> 1),
               query(a, b, (k << 1) + 2, (l + r) >> 1, r)) +
           add[k];
  }
} seg;
long long dp[500005];
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int(i) = (1); (i) <= (n); (i)++) cin >> a[i], mp[a[i]] = 0;
  for (int(i) = (1); (i) <= (n); (i)++) cin >> c[i];
  cin >> m;
  for (int(i) = (1); (i) <= (m); (i)++) cin >> b[i];
  n++;
  a[n] = 2e9;
  m++;
  b[m] = 2e9;
  mp[a[n]] = 0;
  int cnt = 0;
  for (map<long long, int>::iterator it = mp.begin(); it != mp.end(); it++)
    it->second = ++cnt;
  for (int(i) = (1); (i) <= (n); (i)++) a[i] = mp[a[i]];
  for (int(i) = (1); (i) <= (m); (i)++) {
    if (!mp[b[i]]) {
      cout << "NO\n";
      return 0;
    }
    b[i] = mp[b[i]];
    mp2[b[i]] = i;
  }
  seg.build(cnt + 1);
  seg.update(1, cnt, inf);
  for (int(i) = (1); (i) <= (n); (i)++) {
    int pos = mp2[a[i]];
    if (pos) {
      dp[i] = seg.query(b[pos - 1], b[pos - 1]);
    }
    if (c[i] < 0)
      seg.update(0, cnt, c[i]);
    else
      seg.update(0, a[i] - 1, c[i]);
    if (pos) {
      long long prev = seg.query(a[i], a[i]);
      if (dp[i] < prev) seg.update(a[i], a[i], dp[i] - prev);
    }
  }
  long long ans = dp[n];
  if (ans > 1e15) {
    cout << "NO";
  } else
    cout << "YES" << endl << ans;
  return 0;
}
