#include <bits/stdc++.h>

using namespace std;

#define int long long
#define pb push_back
#define ff first
#define ss second

void solve() {
    int n;
    cin >> n;
    vector<pair<int, int>> a(n);
    for (int i = 0; i < n; i++) cin >> a[i].first >> a[i].second;
    vector<int> b(n);
    for (int i = 0; i < n; i++) cin >> b[i];
    int sm = 0;
    int ind = 0;
    int pr = 0;
    for (int i = 0; i < n; i++) {
        if (b[i] != -1) {
            for (int j = ind; j < b[i]; j++) {
                if (a[j].ss <= 0) {
                    sm += a[j].ff;
                    sm += a[j].ss * pr;
                } else {
                    sm += a[j].ff;
                    sm += a[j].ss * j;
                }
            }
            ind = b[i];
            pr = b[i] + 1;
        }
    }
    int sm1 = sm;
    for (int j = ind; j < n; j++) {
        if (a[j].ss <= 0) sm1 += (a[j].ff + a[j].ss * pr);
        else sm1 += (a[j].ff + a[j].ss * j);
        sm = max(sm, sm1);
    }
    cout << sm;
//    vector<int> arr(n, -1e17);
//    arr[0] = a[0].ff;
//    vector<pair<int, int>> pos;
//    for (int i = 0; i < n; i++) {
//        if (b[i] != -1) {
//            pos.push_back({b[i], i});
//        }
//    }
//    int ind = 0;
//    int r = n;
//    int mx = -1e17;
//    if (pos.size() == 0) mx = 0;
//    while (ind < pos.size() && 2 > pos[ind].ff) {
//        ind++;
//    }
//    if (ind == pos.size()) r = n;
//    else r = pos[ind].ss;
//
//    if (r == n) mx = max(mx, a[0].ff);
//    for (int i = 1; i < n; i++) {
//        int mx1 = -1e17;
//        int ty = 0;
//        if (pos.size() != 0 && ind - 1 >= 0) ty = pos[ind - 1].ss + 1;
//        for (int j = 0; j <= ty; j++) mx1 = max(mx1, arr[j]);
//        for (int j = 0; j < ty; j++) arr[j] = -1e17;
//        for (int j = ty; j <= min(i, r); j++) {
//            mx1 = max(mx1, arr[j]);
//            arr[j] = mx1 + a[i].ff + a[i].ss * j;
//        }
//        while (ind < pos.size() && i + 2 > pos[ind].ff) {
//            ind++;
//        }
//        if (ind == pos.size()) r = n;
//        else r = pos[ind].ss;
//        if (r == n) {
//            for (int j = 0; j < n; j++) mx = max(mx, arr[j]);
//        }
//    }
//    cout << mx;
}

signed main() {
//    freopen("input.txt", "rb", stdin);
//    freopen("output.txt", "wb", stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
//    cin >> t;
    while (t--) solve();
}
