#include <bits/stdc++.h>
using namespace std;
int n, m;
long long A[500005], P[500005];
long long B[500005];
long long pickTree[500005], negativeTree[500005];
vector<long long> num[500005];
void update(long long *Tree, long long node, long long val) {
  while (node < 500005) {
    Tree[node] += val;
    node += node & (-node);
  }
}
long long query(long long *Tree, long long node) {
  long long sum = 0;
  while (node) {
    sum += Tree[node];
    node -= node & (-node);
  }
  return sum;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> A[i];
    num[A[i]].push_back(i);
  }
  for (int i = 1; i <= n; i++) {
    cin >> P[i];
    update(pickTree, i, P[i]);
  }
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> B[i];
  }
  vector<pair<long long, long long>> vt[2];
  int dir = 0;
  vt[dir].push_back(make_pair(0, 0));
  long long bef = 0;
  for (int i = 1; i <= m; i++) {
    vt[dir ^ 1].clear();
    if (vt[dir].size() == 0) {
      cout << "NO" << endl;
      return 0;
    }
    for (int j = 0; j < vt[dir].size(); j++) {
      long long val = query(pickTree, vt[dir][j].first);
      vt[dir][j].second -= val;
    }
    long long prevPos = 0, res = 1e18;
    for (int p1 = 0, p2 = 0; p1 < num[B[i]].size(); p1++) {
      while (p2 < vt[dir].size() && vt[dir][p2].first < num[B[i]][p1]) {
        res += query(negativeTree, vt[dir][p2].first) -
               query(negativeTree, prevPos);
        res = min(res, vt[dir][p2].second);
        prevPos = vt[dir][p2].first;
        ++p2;
      }
      res += query(negativeTree, num[B[i]][p1]) - query(negativeTree, prevPos);
      long long newRes = res + query(pickTree, num[B[i]][p1] - 1);
      if (p2) vt[dir ^ 1].push_back(make_pair(num[B[i]][p1], newRes));
      prevPos = num[B[i]][p1];
      if (P[num[B[i]][p1]] > 0) res -= P[num[B[i]][p1]];
    }
    while (bef <= B[i]) {
      for (int j = 0; j < num[bef].size(); j++) {
        update(pickTree, num[bef][j], -P[num[bef][j]]);
        if (P[num[bef][j]] < 0)
          update(negativeTree, num[bef][j], P[num[bef][j]]);
      }
      ++bef;
    }
    dir ^= 1;
  }
  if (vt[dir].size() == 0) {
    cout << "NO" << endl;
    return 0;
  }
  long long Ans = 2e18, lol = 0;
  for (int i = vt[dir].size() - 1, j = n; i >= 0; i--) {
    while (j >= 1 && j > vt[dir][i].first) {
      if (A[j] > B[m]) lol += P[j];
      if (A[j] <= B[m] && P[j] < 0) lol += P[j];
      --j;
    }
    Ans = min(Ans, vt[dir][i].second + lol);
    if (A[vt[dir][i].first] < 0) lol += P[vt[dir][i].first];
  }
  cout << "YES " << endl << Ans << endl;
  return 0;
}
