#include <algorithm>
#include <cstdio>
#include <iostream>
#include <limits>
#include "vector"
using namespace std;

int main() {
    int n;
    std::cin >> n;
    std::vector<int> c(n);
    getchar();
    for (int i = 0; i < n; ++i) {
        c[i]=getchar()-'0';
    }

    std::vector<int> t(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> t[i];
    }


    std::vector<long long> prev(15, std::numeric_limits<long long>::max()/10);
    prev[0] = prev[1] = prev[2] = t[0];
    prev[c[0]] = 0;
    
    std::vector<int> m = {0, 1, 2, 1, 2, 0, 2, 0, 1, 2, 1, 2, 0, 1, 0};
    
    for (int i = 1; i < n; ++i) {
        std::vector<long long> cur(15, 0);
        std::vector<int> cost = {t[i], t[i], t[i]};
        cost[c[i]] = 0;
        
        for (int j = 0; j < 3; ++j) {
            cur[j] = prev[j] + cost[j];
        }
        
        for (int j = 3; j < 9; ++j) {
            cur[j] = std::min(prev[(j - 3) / 2], prev[j]) + cost[m[j]];
        }
        
        for (int j = 9; j < 15; ++j) {
            cur[j] = std::min(prev[j], prev[j - 6]) + cost[m[j]];
        }
        
        prev = cur;
    }
    
    std::cout << *std::min_element(prev.begin(), prev.end()) << std::endl;
    
    return 0;
}