#include <bits/stdc++.h>
using namespace std;
void split(const string& s, char c, vector<string>& result) {
  stringstream ss(s);
  string x;
  while (getline(ss, x, c)) result.push_back(x);
}
void err(vector<string>::iterator it) {}
template <typename T, typename... Args>
void err(vector<string>::iterator it, T a, Args... args) {
  cerr << it->substr((*it)[0] == ' ', it->length()) << " = " << a << ' ';
  err(++it, args...);
}
struct FenwickTree {
  vector<long long> bit;
  int n;
  FenwickTree(long long n) {
    this->n = n + 1;
    bit.assign(n + 1, 0LL);
  }
  FenwickTree(vector<long long> a) : FenwickTree(a.size()) {
    for (size_t i = 0; i < a.size(); i++) add(i, a[i]);
  }
  long long sum(int idx) {
    long long ret = 0;
    for (++idx; idx > 0; idx -= idx & -idx) ret += bit[idx];
    return ret;
  }
  long long sum(int l, int r) { return sum(r) - sum(l - 1); }
  void add(int idx, long long val) {
    for (++idx; idx < n; idx += idx & -idx) bit[idx] += val;
  }
  void range_add(int l, int r, long long val) {
    add(l, val);
    add(r + 1, -val);
  }
  long long get(int idx) {
    long long ret = 0;
    for (++idx; idx > 0; idx -= idx & -idx) ret += bit[idx];
    return ret;
  }
  void put(int idx, long long val) {
    long long tmp = this->get(idx);
    this->range_add(idx, idx, -tmp);
    this->range_add(idx, idx, val);
  }
};
void readarray(vector<long long>& a, int size) {
  long long tmp;
  a.clear();
  for (int i = 0; i < size; i++) {
    cin >> tmp;
    a.push_back(tmp);
  }
}
long long min3(long long a, long long b, long long c) {
  return min(min(a, b), c);
}
vector<long long> a, b, p;
map<long long, int> pos;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int m, n;
  cin >> n;
  readarray(a, n);
  readarray(p, n);
  cin >> m;
  readarray(b, m);
  FenwickTree mem(m + 1);
  for (int i = 0; i <= m; i++) mem.put(i, 100000000100000000LL);
  mem.put(0, 0);
  for (int i = 0; i < m; i++) pos[b[i]] = 1 + i;
  for (int i = 0; i < n; i++) {
    long long cur = a[i];
    long long cost = p[i];
    if (pos.find(cur) == pos.end()) {
      if (cost <= 0) {
        mem.add(0, cost);
      } else {
        int last = lower_bound(b.begin(), b.end(), cur) - b.begin();
        mem.range_add(0, last, cost);
      }
    } else {
      long long addcost1 = mem.get(pos[cur] - 1);
      long long addcost2 = mem.get(pos[cur]);
      long long addcost3 = addcost2 + cost;
      long long mincost = min3(addcost1, addcost2, addcost3);
      mem.put(pos[cur], mincost);
      mem.range_add(0, pos[cur] - 1, cost);
      if (cost <= 0) {
        mem.range_add(pos[cur] + 1, m, cost);
      }
    }
  }
  long long ans = mem.get(m);
  if (ans * 10 > 100000000100000000LL)
    cout << "NO" << endl;
  else {
    cout << "YES" << endl << ans << endl;
  }
  return 0;
}
