func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   #pragma GCC optimize( unroll-loops )   #pragma GCC optimize( -O2 )   using namespace std;   const long long N = 500000 + 10;   const long long MOD = 1000000000 + 7;   const long long INF = 100000000000000010;   const long long LOG = 25;   long long dp[N], n, a[N], lazy[N << 2], m, b[N], seg[N << 2], p[N], koj[N];   void modify(long long id, long long x) {     seg[id] += x;     lazy[id] += x;   }   void shift(long long id) {     modify(id << 1, lazy[id]);     modify(id << 1 | 1, lazy[id]);     lazy[id] = 0;   }   void add(long long id, long long lq, long long rq, long long x, long long l,            long long r) {     if (rq <= l || r <= lq) return;     if (lq <= l && r <= rq) {       modify(id, x);       return;     }     long long md = (l + r) >> 1;     shift(id);     add(id << 1, lq, rq, x, l, md);     add(id << 1 | 1, lq, rq, x, md, r);     seg[id] = seg[id << 1] + seg[id << 1 | 1];   }   long long get(long long id, long long lq, long long rq, long long l,                 long long r) {     if (rq <= l || r <= lq) return 0;     if (lq <= l && r <= rq) return seg[id];     shift(id);     long long md = (l + r) >> 1;     return get(id << 1, lq, rq, l, md) + get(id << 1 | 1, lq, rq, md, r);   }   void Set(long long id, long long lq, long long rq, long long x, long long l,            long long r) {     if (rq <= l || r <= lq) return;     if (lq <= l && r <= rq) {       seg[id] = x;       return;     }     long long md = (l + r) >> 1;     shift(id);     Set(id << 1, lq, rq, x, l, md);     Set(id << 1 | 1, lq, rq, x, md, r);     seg[id] = seg[id << 1] + seg[id << 1 | 1];   }   int32_t main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n;     for (long long i = 1; i <= n; i++) {       cin >> a[i];     }     for (long long i = 1; i <= n; i++) cin >> p[i];     cin >> m;     for (long long i = 1; i <= m; i++) {       cin >> b[i];       koj[b[i]] = i;     }     add(1, 1, m + 1, INF, 0, m + 1);     for (long long i = 1; i <= n; i++) {       if (koj[a[i]] == 0) {         long long x = lower_bound(b + 1, b + m + 1, a[i]) - b;         add(1, 0, x, p[i], 0, m + 1);         long long zed = min(0ll, p[i]);         add(1, x, m + 1, zed, 0, m + 1);       } else {         long long j = koj[a[i]];         long long zed = min(0ll, p[i]);         long long mn =             min(get(1, j - 1, j, 0, m + 1), get(1, j, j + 1, 0, m + 1) + zed);         Set(1, j, j + 1, mn, 0, m + 1);         add(1, 0, j, p[i], 0, m + 1);         add(1, j + 1, m + 1, zed, 0, m + 1);       }     }     long long ans = get(1, m, m + 1, 0, m + 1);     if (ans > 1000000000000000) return cout <<  NO , 0;     cout <<  YES n ;     cout << ans;     return 0;   }   