// #pragma GCC optimize("O3,fast-math,unroll-loops")
#include <bits/stdc++.h>

#define i64 int64_t
#define vi vector<int>
#define vvi vector<vi>
#define vc vector
#define vb vc<bool>
#define pb push_back
#define pii pair<int, int>
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()

using namespace std;

template <typename T>

istream& operator>>(istream& in, vector<T> &a) {
    for (T &el : a) in >> el;
    return in;
}

template <typename T>

ostream& operator<<(ostream& out, vector<T> a) {
    for (T &el : a) out << el << " ";
    return out;
}
#define int i64

void solve() {
    int n;
    cin >> n;
    vc<pii> p(n);
    for (int i = 0; i < n; ++i) cin >> p[i].fi >> p[i].se;
    vi t(n);
    cin >> t;
    vi t1(n);
    iota(all(t1), 0);
    int lst = -1;
    bool is = 1;
    for (int i = 0; i < n; ++i) {
        if (t[i] != -1) {
            t1[t[i] - 1] = min(t1[t[i] - 1], i);
            lst = t[i] - 1;
            if (t1[t[i]] <= i) {
                is = 0;
            } else {
                is = 1;
            }
        }
    }
    for (int i = n - 2; i >= 0; --i) {
        t1[i] = min(t1[i], t1[i + 1]);
    }

    int cur = 0;
    int ans = -1e17;
    for (int i = 0; i < n; ++i) {
        if (i > lst) {
            ans = max(ans, cur);
        }
        if (i > lst + 1 && !is) break;
        cur += p[i].fi + p[i].se * t1[i];
    }
    ans = max(ans, cur);
    cout << ans;
}

int32_t main() {
    // freopen("inputd.txt", "r", stdin);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
}