#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
struct BIT {
  vector<long long> tree;
  BIT(int n) : tree(n + 2) {}
  void upd(int p, long long v) {
    for (int i = ++p; i < tree.size(); i += i & -i) tree[i] += v;
  }
  long long get(int p) {
    long long sum = 0;
    for (int i = ++p; i; i -= i & -i) sum += tree[i];
    return sum;
  }
  long long query(int l, int r) {
    if (r < l) return 0;
    return get(r) - get(l - 1);
  }
};
vector<int> adj[N], q[N];
int Prev[N], a[N], p[N], b[N];
long long bro[2][N], par[2][N];
long long dp[N];
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    adj[a[i]].push_back(i);
  }
  for (int i = 1; i <= n; i++) cin >> p[i];
  int m;
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> b[i];
    Prev[b[i]] = b[i - 1];
  }
  for (int i = 1; i <= n; i++) {
    if (!Prev[a[i]]) continue;
    auto &v = adj[Prev[a[i]]];
    auto it = lower_bound(v.begin(), v.end(), i);
    if (it != v.begin()) {
      it = prev(it);
      q[*it].push_back(i);
    }
  }
  memset(dp, '?', sizeof dp);
  BIT bit(n);
  for (int e = n; e >= 1; e--) {
    auto &v = adj[e];
    for (int j = 0; j < v.size(); j++) {
      int i = v[j];
      for (int x : q[i]) par[0][x] = bit.query(i + 1, x - 1);
      if (a[i] == b[m]) dp[i] = bit.query(i + 1, n);
      if (j != v.size() - 1) bro[0][v[j + 1]] = bit.query(i + 1, v[j + 1]);
    }
    for (int j : v) bit.upd(j, p[j]);
  }
  bit = BIT(n);
  for (int e = 1; e <= n; e++) {
    auto &v = adj[e];
    for (int j : v)
      if (p[j] < 0) bit.upd(j, p[j]);
    for (int j = 0; j < v.size(); j++) {
      int i = v[j];
      for (int x : q[i]) par[1][x] = bit.query(i + 1, x - 1);
      if (a[i] == b[m]) {
        dp[i] += bit.query(i + 1, n);
      }
      if (j != v.size() - 1) bro[1][v[j + 1]] = bit.query(i + 1, v[j + 1]);
    }
  }
  long long ans = 2e18;
  for (int i = n; i >= 1; i--) {
    if (Prev[a[i]]) {
      auto &v = adj[Prev[a[i]]];
      auto it = lower_bound(v.begin(), v.end(), i);
      if (it != v.begin()) {
        it = prev(it);
        long long v = dp[i] + par[0][i] + par[1][i];
        dp[*it] = min(dp[*it], v);
      }
    }
    auto &v = adj[a[i]];
    auto it = lower_bound(v.begin(), v.end(), i);
    if (it != v.begin()) {
      it = prev(it);
      long long v = dp[i] + bro[0][i] + bro[1][i];
      dp[*it] = min(dp[*it], v);
    }
  }
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i] == b[1]) ans = min(ans, dp[i] + sum);
    sum += p[i];
  }
  if (ans >= 1e17) {
    cout << "NO";
  } else {
    cout << "YES\n";
    cout << ans;
  }
}
