#include <bits/stdc++.h>
using namespace std;
namespace RA {
int r(int p) { return 1ll * rand() * rand() % p; }
int r(int L, int R) { return r(R - L + 1) + L; }
}  // namespace RA
const int N = 5e5 + 5, SZ = N * 4;
const long long INF = 1ll << 60;
int n, a[N], p[N], m, b[N];
long long val[SZ], tag[SZ];
void build(int u = 1, int l = 0, int r = m) {
  if (l == r) {
    val[u] = l == 0 ? 0 : INF;
    return;
  }
  int mid = (l + r) >> 1;
  build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
}
void nodeadd(int u, long long v) {
  tag[u] += v;
  val[u] += v;
}
void pushdown(int u) {
  if (tag[u]) nodeadd(u << 1, tag[u]), nodeadd(u << 1 | 1, tag[u]), tag[u] = 0;
}
void add(int L, int R, long long v, int u = 1, int l = 0, int r = m) {
  if (L > R || R < l || r < L) return;
  if (L <= l && r <= R) {
    nodeadd(u, v);
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(u);
  add(L, R, v, u << 1, l, mid), add(L, R, v, u << 1 | 1, mid + 1, r);
}
void assign(int pos, long long v, int u = 1, int l = 0, int r = m) {
  if (l == r) {
    val[u] = v, tag[u] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(u);
  if (pos <= mid)
    assign(pos, v, u << 1, l, mid);
  else
    assign(pos, v, u << 1 | 1, mid + 1, r);
}
long long query(int pos, int u = 1, int l = 0, int r = m) {
  if (l == r) return val[u];
  int mid = (l + r) >> 1;
  pushdown(u);
  if (pos <= mid)
    return query(pos, u << 1, l, mid);
  else
    return query(pos, u << 1 | 1, mid + 1, r);
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i <= (n); ++i) scanf("%d", &a[i]);
  for (int i = (1); i <= (n); ++i) scanf("%d", &p[i]);
  scanf("%d", &m);
  for (int i = (1); i <= (m); ++i) scanf("%d", &b[i]);
  build();
  for (int i = (1); i <= (n); ++i) {
    int pos = lower_bound(b + 1, b + m + 1, a[i]) - b;
    if (b[pos] == a[i]) {
      add(pos + 1, m, min(p[i], 0));
      long long fpos = query(pos), fpos_1 = query(pos - 1);
      assign(pos, min(fpos + min(p[i], 0), fpos_1));
      add(0, pos - 1, p[i]);
    } else {
      add(pos, m, min(p[i], 0));
      add(0, pos - 1, p[i]);
    }
  }
  long long ans = query(m);
  if (ans > (1ll << 55))
    puts("NO");
  else
    printf("YES\n%lld\n", ans);
  return 0;
}
