#include<stdio.h>
#include<string.h>
int compute(int headx,int heady,int subx,int suby,int x[],int y[])
{
int n;
n=subx*heady*suby;
return n;
}
int main(void)
{
int num;
scanf("%d",&num);
int x[16]={0};
int y[16]={0};
for(int i=0;i<num;i++)
{
scanf("%d",&x[i]);
scanf("%d",&y[i]);
}
char str[100]={0};
scanf("%s",&str);
int x_stack[100]={0};
int y_stack[100]={0};
char symbolstack[100]={0};
int dx_size=0;
int dy_size=0;
int s_size=0;
int len=strlen(str);
int sum=0;
for(int i=0;i<len;i++)
{
if(str[i]=='(')
{
symbolstack[s_size++]=str[i];
}
if(str[i]>='A'&&str[i]<='Z')
{
int ii=str[i]-'A';
x_stack[dx_size++]=x[ii];
y_stack[dy_size++]=y[ii];
}
if(str[i]==')')
{
sum+=compute(x_stack[dx_size-1],y_stack[dy_size-1],x_stack[dx_size-2],y_stack[dy_size-2],x,y);
int x1=x_stack[dx_size-2];
int y1=y_stack[dy_size-1];
dx_size--;//数据栈顶取出
dx_size--;//数据栈倒数第二个取出
dy_size--;
dy_size--;
x_stack[dx_size++]=x1;
y_stack[dy_size++]=y1;
s_size--;
}
}
printf("%d",sum);
return 0;
}