#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
long long s[4 * (N + 10)];
long long v[N + 10];
int ns, q;
void build(int no = 1, int l = 0, int r = N) {
  if (r - l == 1) {
    s[no] = v[l];
    return;
  }
  int mid = (l + r) / 2;
  build(2 * no, l, mid);
  build(2 * no + 1, mid, r);
  s[no] = s[2 * no] + s[2 * no + 1];
}
void modify(int i, long long x, int no = 1, int l = 0, int r = N) {
  if (r - l == 1) {
    s[no] = x;
    return;
  }
  int mid = (l + r) / 2;
  if (i < mid)
    modify(i, x, 2 * no, l, mid);
  else
    modify(i, x, 2 * no + 1, mid, r);
  s[no] = s[2 * no] + s[2 * no + 1];
}
long long query(int lq, int rq, int no = 1, int l = 0, int r = N) {
  if (rq <= l or r <= lq) return 0;
  if (lq <= l and r <= rq) return s[no];
  int mid = (l + r) / 2;
  return query(lq, rq, 2 * no, l, mid) + query(lq, rq, 2 * no + 1, mid, r);
}
long long n, m;
long long a[N], b[N], valb_to_id[N], bestsf[N], p[N];
long long val_can_delete[N];
long long id_can_delete[N];
int main() {
  scanf("%lld", &n);
  for (int i = 0; i < n; i++) scanf("%lld", a + i);
  for (int i = 0; i < n; i++) scanf("%lld", p + i);
  scanf("%lld", &m);
  for (int i = 0; i < N; i++) valb_to_id[i] = -1;
  for (int i = 0; i < m; i++) {
    scanf("%lld", b + i);
    valb_to_id[b[i]] = i;
  }
  long long add_ans = 0;
  vector<int> v1, v2;
  for (int i = 0; i < n; i++) {
    if (valb_to_id[a[i]] == -1 and p[i] < 0) {
      add_ans += p[i];
    } else {
      v1.push_back(a[i]);
      v2.push_back(p[i]);
    }
  }
  n = (int)(v1).size();
  for (int i = 0; i < n; i++) {
    a[i] = v1[i];
    p[i] = v2[i];
  }
  for (int i = 0; i < n; i++) {
    if (a[i] > b[m - 1]) add_ans += p[i];
  }
  for (int i = 0; i < m; i++) bestsf[i] = LLONG_MAX;
  build();
  for (int i = n - 1; i >= 0; i--) {
    int id = valb_to_id[a[i]];
    if (id != -1) {
      id_can_delete[i] = val_can_delete[a[i]];
      if (p[i] < 0) val_can_delete[a[i]] += p[i];
    }
  }
  for (int i = 0; i < n; i++) {
    if (valb_to_id[a[i]] != -1) {
      int id = valb_to_id[a[i]];
      if (id == 0 or bestsf[id - 1] < LLONG_MAX) {
        long long tot = 0;
        long long best_ant = 0;
        long long cost_meio = 0;
        long long ant = 0;
        if (id) {
          ant = b[id - 1];
          best_ant = bestsf[id - 1];
        }
        cost_meio = query(ant + 1, b[id] + 1);
        tot = best_ant + cost_meio + id_can_delete[i];
        bestsf[id] = min(bestsf[id], tot);
      }
    }
    modify(a[i], p[i] + v[a[i]]);
    v[a[i]] += p[i];
  }
  if (bestsf[m - 1] < LLONG_MAX) {
    puts("YES");
    printf("%lld\n", bestsf[m - 1] + add_ans);
  } else {
    puts("NO");
  }
}
