#include <bits/stdc++.h>
using namespace std;
const int maxx = 500001;
const long long inf = 1e18;
int n, m, arr[maxx], brr[maxx], cst[maxx];
long long fen[maxx], dp[maxx];
map<int, vector<int> > mp;
set<pair<int, int> > st;
void add(int in, int val) {
  while (in <= n) {
    fen[in] += val;
    in += (in & -in);
  }
}
long long get(int in) {
  long long ret = 0;
  while (in > 0) {
    ret += fen[in];
    in -= (in & -in);
  }
  return ret;
}
long long query(int l, int r) { return get(r) - get(l - 1); }
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> arr[i], mp[arr[i]].push_back(i), st.insert({arr[i], i});
  for (int i = 1; i <= n; i++) cin >> cst[i], dp[i] = -inf;
  cin >> m;
  for (int i = 1; i <= m; i++) cin >> brr[i];
  for (auto it : mp[brr[1]]) dp[it] = cst[it];
  while (!st.empty() && (*st.begin()).first <= brr[1]) {
    int x = (*st.begin()).second;
    if (cst[x] > 0) add(x, cst[x]);
    st.erase(st.begin());
  }
  for (int i = 1; i < m; i++) {
    int x = brr[i], y = brr[i + 1];
    vector<int> cur;
    for (auto it : mp[x]) cur.push_back(it);
    for (auto it : mp[y]) cur.push_back(it);
    sort(cur.begin(), cur.end());
    long long bst = -inf;
    int lst = 0;
    for (auto it : cur) {
      bst += query(lst + 1, it);
      lst = it;
      if (arr[it] == x)
        bst = max(bst, dp[it]);
      else
        dp[it] = bst + cst[it];
    }
    while (!st.empty() && (*st.begin()).first <= y) {
      int x = (*st.begin()).second;
      if (cst[x] > 0) add(x, cst[x]);
      st.erase(st.begin());
    }
  }
  long long res = -inf;
  for (int i = 1; i <= n; i++) {
    if (arr[i] == brr[m] && dp[i] != -inf)
      res = max(res, dp[i] + query(i + 1, n));
  }
  if (res < -1e15)
    cout << "NO" << '\n';
  else {
    res = -res;
    cout << "YES" << '\n';
    for (int i = 1; i <= n; i++) res += cst[i];
    cout << res << '\n';
  }
}
