#include<iostream> #include<algorithm> #include<cstring> #include<bits/stdc++.h> const int N=10000+10; using namespace std; int dp[N]; int a[N][N]; int mine[N]; bool isnumber(char c) { if(c>='0' && c<='9') return true; return false; } int main() { int n,x,num,k; char c; while(cin>>n) { memset(a,0,sizeof(a)); for(int i=1; i<=n; i++) scanf("%d",&mine[i]); for(int i=1; i<=n; i++) { scanf("%d",&x); k=0; do { num=0; while(isnumber(c=getchar())) num=num*10+c-'0'; if(num>0) a[num][++a[num][0]]=x; }while(c!='\n'); } int ans=0; for(int i=1; i<=n; i++) { int Max=0; for(int j=1; j<=a[i][0]; j++) { Max=max(Max,mine[a[i][j]]); } mine[i]+=Max; ans=max(mine[i],ans); } printf("%d\n",ans); } return 0; }