#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const int maxn = 5e5 + 5;
map<long long, long long> pos;
long long p[maxn];
long long a[maxn], b[maxn];
class element {
 public:
  int l, r;
  long long plus, val;
};
class Tree {
 public:
  element tree[maxn << 2];
  void build(int id, int l, int r) {
    tree[id].l = l;
    tree[id].r = r;
    tree[id].plus = 0;
    if (l == r) {
      tree[id].val = inf;
      return;
    }
    int mid = (l + r) / 2;
    build(id * 2, l, mid);
    build(id * 2 + 1, mid + 1, r);
  }
  void update(int id, int p, long long num) {
    if (tree[id].l == p && tree[id].r == p) {
      tree[id].val = num;
      return;
    }
    if (tree[id].l > p || tree[id].r < p) return;
    push_down(id);
    update(id * 2, p, num);
    update(id * 2 + 1, p, num);
  }
  void add(int id, int l, int r, long long num) {
    if (tree[id].l >= l && tree[id].r <= r) {
      tree[id].plus += num;
      tree[id].val += num * (tree[id].r - tree[id].l + 1);
      return;
    }
    if (tree[id].l > r || tree[id].r < l) return;
    push_down(id);
    if (tree[id * 2].r >= l) add(id * 2, l, r, num);
    if (tree[id * 2 + 1].l <= r) add(id * 2 + 1, l, r, num);
  }
  void push_down(int id) {
    if (tree[id].l != tree[id].r)
      for (int j = id * 2; j <= id * 2 + 1; j++) {
        tree[j].val += tree[id].plus * (tree[j].r - tree[j].l + 1);
        tree[j].plus += tree[id].plus;
      }
    tree[id].plus = 0;
  }
  long long query(int id, int l, int r) {
    if (tree[id].l >= l && tree[id].r <= r) return tree[id].val;
    if (tree[id].l > r || tree[id].r < l) return 0;
    long long s = 0;
    push_down(id);
    if (tree[id * 2].r >= l) s += query(id * 2, l, r);
    if (tree[id * 2 + 1].l <= r) s += query(id * 2 + 1, l, r);
    return s;
  }
} dp;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> p[i];
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> b[i];
    pos[b[i]] = i;
  }
  dp.build(1, 0, m);
  dp.update(1, 0, 0);
  for (int i = 1; i <= n; i++) {
    if (pos[a[i]] == 0) {
      if (p[i] < 0) {
        dp.add(1, 0, m, p[i]);
        continue;
      }
      long long *pp = lower_bound(b + 1, b + 1 + m, a[i]);
      long long ppp = pp - b;
      dp.add(1, 0, ppp - 1, p[i]);
    } else {
      int pp = pos[a[i]];
      long long val1 = dp.query(1, pp, pp), val2 = dp.query(1, pp - 1, pp - 1);
      dp.update(1, pp, min(val1 + min(0ll, p[i]), val2));
      if (pp != m && p[i] < 0) dp.add(1, pp + 1, m, p[i]);
      dp.add(1, 0, pp - 1, p[i]);
    }
  }
  long long ans = dp.query(1, m, m);
  if (ans <= 5e14)
    cout << "YES\n" << ans << "\n";
  else
    cout << "NO\n";
  return 0;
}
