# Process input
n = int(input())
ac = list(map(int, input()))
at = list(map(int, input().split()))

# DP
# - 阶段:前i个气球
# - 状态:气球排列 0, 1, 2, 01, 02, 10, 12, 20, 21, 012, 021, 102, 120, 201, 210
dp = [1e10] * 15
for i in range(3): dp[i] = 0
for i in range(1, n+1):
    color, time = ac[i-1], at[i-1]
    cost = [time] * 3
    cost[color] = 0
    # 前i个气球共3种颜色
    if i >= 3:
        dp[9] = min(dp[3], dp[9]) + cost[2]  # 01|012 -> 012
        dp[10] = min(dp[4], dp[10]) + cost[1]  # 02|021 -> 021
        dp[11] = min(dp[5], dp[11]) + cost[2]  # 10|102 -> 102
        dp[12] = min(dp[6], dp[12]) + cost[0]  # 12|120 -> 120
        dp[13] = min(dp[7], dp[13]) + cost[1]  # 20|201 -> 201
        dp[14] = min(dp[8], dp[14]) + cost[0]  # 21|210 -> 210
    # 前i个气球共2种颜色
    if i >= 2:
        dp[3] = min(dp[0], dp[3]) + cost[1]  # 0|01 -> 01
        dp[4] = min(dp[0], dp[4]) + cost[2]  # 0|02 -> 02
        dp[5] = min(dp[1], dp[5]) + cost[0]  # 1|10 -> 10
        dp[6] = min(dp[1], dp[6]) + cost[2]  # 1|12 -> 12
        dp[7] = min(dp[2], dp[7]) + cost[0]  # 2|20 -> 20
        dp[8] = min(dp[2], dp[8]) + cost[1]  # 2|21 -> 21
    # 前i个气球共1种颜色
    dp[0] = dp[0] + cost[0]  # 0 -> 0
    dp[1] = dp[1] + cost[1]  # 1 -> 1
    dp[2] = dp[2] + cost[2]  # 2 -> 2
    

# Onput
print(min(dp))