rt
#include<bits/stdc++.h>
#define ri register int
#define ll long long
#define int long long
#define mkp make_pair
using namespace std;
const int maxn=3e6+7;
int n;
int s[maxn];
bool ilg[maxn];
ll pre[maxn];
ll f[maxn];
int a[maxn];
vector<pair<int,int> >st;
const ll inf=1e13;
ll maxi;
void solve(int l,int r){
// cout<<l<<' '<<r<<endl;
for(ri i=0;i<=r-l+1;i++){
pre[i]=-inf;
}
s[l-1]=0;
for(ri i=l;i<=r;i++){
s[i]+=s[i-1];
}
for(ri i=l;i<=r;i++){
f[i]=maxi;
if(s[i]>s[i-1]){
pre[s[i-1]]=max(pre[s[i-1]],maxi-a[i]);
}
else{
f[i]=max(f[i],pre[s[i]]+a[i]);
}
maxi=max(maxi,f[i]);
}
}
signed main(){
ios::sync_with_stdio(0);
cin>>n;
for(ri i=1;i<=n;i++){
char t;cin>>t;
if(t==40)s[i]=1;
else s[i]=-1;
}
for(ri i=1;i<=n;i++){
if(s[i]==1)st.push_back(mkp(i,1));
else{
if(st.size()&&st[st.size()-1].second==1)st.pop_back();
else st.push_back(mkp(i,-1));
}
}
for(auto x:st){
ilg[x.first]=1;
// cout<<x.first<<endl;
}
for(ri i=1;i<=n;i++)cin>>a[i];
for(ri i=1,j=1;i<=n;i=j+1){
while(ilg[i]&&i<=n)i++;
if(i>n)break;
j=i;
while(!ilg[j+1]&&j+1<=n)j++;
solve(i,j);
if(j==n)break;
}
// for(ri i=1;i<=n;i++)cout<<s[i]<<' ';cout<<endl;
// for(ri i=1;i<=n;i++)cout<<f[i]<<' ';cout<<endl;
cout<<maxi;
return 0;
}
/*
16
)))()(()((())()(
1 2 3 4 5 6 2 4 1 7 3 2 8 4 9 5
*/