#include <bits/stdc++.h>
#define fu(i, a, b) for(int i = (a); i <= (b); i++)
#define fd(i, a, b) for(int i = (a); i >= (b); i--)
#define fi first
#define se second
#define ll long long
using namespace std;

const int N = 2e5 +5 ;
const int INF = 1e9 + 5;

int n;
string s;
ll dp[N][3], a[N];

void solve()
{
    memset(dp, 0, sizeof(dp));
    fu(i, 1, n)
    {
        if(s[i] == '1') {
            dp[i][1] = max(dp[i - 1][1], dp[i - 1][0]) + a[i];
            if(i >= 2) dp[i - 1][1] = dp[i - 1][0] + a[i - 1];
            dp[i][0] = max(dp[i][0], max(dp[i - 1][0], dp[i - 1][1]));
        }
        else {
            dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
            dp[i][1] = max(dp[i - 1][0], dp[i - 1][1]);
        }
    }
    cout << max(dp[n][0], dp[n][1]) << '\n';
  //  cout << dp[n][0] << ' ' << dp[n][1] << '\n';
}

void read()
{
    int t;
    cin >> t;
    while(t--)
    {
        cin >> n;
        cin >> s;
        s = '*' + s;
        fu(i, 1, n) cin >> a[i];
        solve();
    }
}

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);
    read();
}

