import sys input = lambda : sys.stdin.readline().strip() ni = lambda : int(input()) na = lambda : list(map(int, input().split())) yes = lambda : print("yes"); Yes = lambda : print("Yes"); YES = lambda : print("YES") no = lambda : print("no"); No = lambda : print("No"); NO = lambda : print("NO") class SparseTable(): ''' 更新がないかつ冪等性が成り立つ場合 ''' def __init__(self, arr: list, op: callable=min) -> None: n = len(arr) h = n.bit_length() self.table = [[0] * n for _ in range(h)] self.table[0] = arr[::] for k in range(1, h): t, p = self.table[k], self.table[k - 1] l = 1 << (k - 1) for i in range(n - l * 2 + 1): t[i] = op(p[i], p[i + l]) self.op = op def query(self, l: int, r: int) -> int: k = (r - l).bit_length() - 1 return self.op(self.table[k][l], self.table[k][r - (1 << k)]) def solve(s): n = len(s) s = [0] + s + s for i in range(n*2): s[i+1] += s[i] sp = SparseTable(s) ans = [] for i in range(n+1): ans.append(s[i] - sp.query(i, i + n + 1)) return ans n = ni() s = [[-1, 1][x=="("] for x in input()] if n % 2 == 1: print(-1) exit() r, m = na() # 置き換えての最初コストは左から見たpresumのmin+右から見たpresumのmin A = solve(s) B = solve([-x for x in s[::-1]]) C = [(A[i] + 1)//2 + (B[-1-i] + 1)//2 for i in range(n+1)] # print(A) # print(B) ans = 10 ** 18 for i in range(n): ans = min(ans, C[-1-i] * m + i * r) print(ans)