import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
int n = in.nextInt();
int[][] matrix = new int[n][2];
for (int i = 0; i < n; i++) {
matrix[i][0] = in.nextInt();
matrix[i][1] = in.nextInt();
in.nextLine();
}
char[] ex = in.nextLine().toCharArray();
Deque<Integer> deque = new ArrayDeque<>();
int index = 0;
int sum = 0;
for (int i = 0; i < ex.length; i++) {
if (ex[i] == '(') { // 遇到左括号,跳过
continue;
}
if (Character.isLetter(ex[i])) { // 行列数入栈
deque.push(matrix[index][0]);
deque.push(matrix[index][1]);
index++;
if (i == ex.length - 1) { // 最后一个矩阵,结算
sum += compute(deque);
break;
}
if (i > 0 && Character.isLetter(ex[i - 1]) && Character.isLetter(ex[i + 1])) {
// 上一个符号与下一个符号都是矩阵符号,结算一次
sum += compute(deque);
}
continue;
}
if (ex[i] == ')' && deque.size() >= 4) {
sum += compute(deque); // 遇到右括号,若栈内有矩阵则结算一次
}
}
while (deque.size() >= 4) { // 结算到栈中的矩阵小于两组为止
sum += compute(deque);
}
System.out.println(sum);
}
}
private static int compute(Deque<Integer> deque) {
int y1 = deque.pop();
int y0 = deque.pop();
int x1 = deque.pop();
int x0 = deque.pop();
// 将计算后的行列数入栈
deque.push(x0);
deque.push(y1);
return x0 * x1 * y1;
}
}