#include using namespace std; #define all(p) p.begin(), p.end() #define rep(i, a, b) for (int i = (int)(a); i < (int)(b); i++) using ll = long long; #include struct F{ int sum = 0; int mim = 0; }; F op(F l, F r){ l.mim = min(l.mim, l.sum + r.mim); l.sum += r.sum; return l; } F e(){ return F{}; } int main(){ int N; cin >> N; string S; cin >> S; ll R, M; cin >> R >> M; if (N & 1){ cout << "-1\n"; return 0; } vector base(N); rep(i, 0, N){ if (S[i] == '(') base[i] = {1, 0}; else base[i] = {-1, -1}; } rep(i, 0, N) base.push_back(base[i]); atcoder::segtree seg(base); ll ans = (1ll << 60); rep(i, 0, N){ auto tmp = seg.prod(N - i, 2 * N - i); int z = (1 - tmp.mim) / 2; z += abs(tmp.sum + z * 2) / 2; ans = min(ans, R * i + z * M); } cout << ans << "\n"; }