# 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))