#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 5e5 + 5;
int n, m;
int a[maxn], b[maxn], prv[maxn], inv[maxn];
long long ans;
long long p[maxn], dp[maxn], cost[maxn];
class FenwickTree {
 private:
  long long dat[maxn];

 public:
  inline void update(int x, long long k) {
    if (!~x) return;
    for (++x; x <= n + 1; x += x & (-x)) dat[x] += k;
    return;
  }
  inline long long query(int x) {
    if (!~x) return 0;
    long long ret = 0;
    for (++x; x; x -= x & (-x)) ret += dat[x];
    return ret;
  }
} fen;
int main() {
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) scanf("%d", a + i), --a[i];
  for (int i = (0); i < (n); ++i) scanf("%lld", p + i);
  scanf("%d", &m);
  for (int i = (0); i < (m); ++i) scanf("%d", b + i), --b[i];
  memset(prv, -1, sizeof(prv));
  memset(inv, -1, sizeof(inv));
  for (int i = (1); i < (m); ++i) {
    prv[b[i]] = b[i - 1];
    inv[b[i]] = i;
  }
  inv[b[0]] = 0;
  for (int i = (0); i < (n); ++i) {
    cost[i] += fen.query(a[i]) - fen.query(prv[a[i]]);
    if (p[i] < 0) {
      ans += p[i];
      cost[i] -= p[i];
    } else {
      fen.update(a[i], p[i]);
    }
  }
  ans += fen.query(n) - fen.query(b[m - 1]);
  memset(dp, 0x3f, sizeof(dp));
  dp[0] = 0;
  for (int i = (0); i < (n); ++i)
    if (~inv[a[i]]) {
      dp[inv[a[i]] + 1] = min(dp[inv[a[i]] + 1], dp[inv[a[i]]] + cost[i]);
    }
  ans += dp[m];
  if (ans > INF / 2)
    puts("NO");
  else
    printf("YES\n%lld\n", ans);
  return 0;
}
