#include <iostream>
#include <vector>
using namespace std;
vector<long long> A;
vector<long long> B;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    long long n,a,b,p;
    cin >> n;
    vector<long long> mn(n,0);
    vector<long long> mx(n);
    vector<bool> up(n,true);
    vector<long long> fr(n,1e18);
    vector<long long> ba(n,-1e18);
    for(long long i=0;i<n;i++)
    {
        mx[i]=i;
    }
    for(long long i=0;i<n;i++)
    {
        cin >> a >> b;
        A.push_back(a);
        B.push_back(b);
    }
    for(long long i=0;i<n;i++)
    {
        cin >> p;
        if(p!=-1)
        {
            fr[p-1]=i;
            ba[p]=i+1;
        }
    }
    long long x=-1e18;
    for(int i=0;i<n;i++)
    {
        x=max(x,ba[i]);
        mn[i]=max(mn[i],x);
    }
    x=1e18;
    for(int i=n-1;i>=0;i--)
    {
        x=min(x,fr[i]);
        mx[i]=min(mx[i],x);
        if(x!=1e18)
        {
            up[i]=false;
        }
    }
    vector<vector<long long>> dp(n,vector<long long>(2,-1e18));
    for(int i=n-1;i>=0;i--)
    {
        if(i==n-1)
        {
            dp[n-1][0]=A[n-1]+B[n-1]*mx[n-1];
            if(up[0])
            {
                dp[n-1][1]=0;
            }
        }
        else
        {
            dp[i][0]=max(dp[i-1][0],dp[i-1][1])+A[i]+B[i]*mx[i];
            if(up[i])
            {
                dp[i][1]=dp[i-1][1];
            }
        }
    }
    cout << max(dp[n-1][0],dp[n-1][1]);
    return 0;
}
