#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <iostream>
#include <set>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define MOD 1000000007
#define PRIME1 99999883
#define PRIME2 99999893
#define EPS 0.00000001
using namespace std;

struct Info{
	char name[81];
	int weight;
};

struct Range{
	Range(int arg_start,int arg_end,int arg_multi){
		start = arg_start;
		end = arg_end;
		multi = arg_multi;
	}
	int start,end,multi;
};

vector<Info> V;
char line[81];


bool strCmp(char* base, char* comp){
	int length1 = 0,length2 = 0;
	for(int i=0;base[i] != '\0'; i++)length1++;
	for(int i=0;comp[i] != '\0'; i++)length2++;
	if(length1 != length2)return false;

	for(int i=0;base[i] != '\0'; i++){
		if(base[i] != comp[i])return false;
	}
	return true;
}

void strcpy(char* to,char* str){
	for(int i=0;str[i] != '\0';i++){
		to[i] = str[i];
		to[i+1] = '\0';
	}
}

int getW(char work[81]){
	for(int i = 0; i < V.size();i++){
		if(strCmp(V[i].name,work)){
			return V[i].weight;
		}
	}
	return -1; //must not reach here
}

int recursive(int left,int right){
	int depth = 0,work_index = 0,start,tmp,ans = 0;
	char work[81];

	stack<Range> S;

	for(int i = left; i <= right;){
		if(line[i] == '('){
			if(depth == 0){
				start = i;
			}
			depth++;
			i++;
		}else if(line[i] == ')'){
			depth--;
			if(depth == 0){

				tmp = 0;
				for(++i;i <= right && line[i] >= '0' && line[i] <= '9';i++){
					tmp = 10*tmp + line[i] - '0';
				}
				S.push(Range(start,i,tmp));
			}else{
				i++;
			}
		}else{
			if(line[i] >= 'A' && line[i] <= 'Z'){
				if(depth == 0){

					work[work_index++] = line[i];
					work[work_index] = '\0';

					if(i == right || line[i+1] < 'a' || line[i+1] > 'z'){

						if(i < right && line[i+1] >= '0' && line[i+1] <= '9'){
							tmp = 0;
							for(int k = i+1;k <=right && line[k] >= '0' && line[k] <= '9';k++){
								tmp = 10*tmp + line[k] - '0';
							}
						}else{
							tmp = 1;
						}

						ans += getW(work)*tmp;
						work_index = 0;
					}

				}
			}else if(line[i] >= 'a' && line[i] <= 'z'){
				if(depth == 0){
					work[work_index++] = line[i];
					work[work_index] = '\0';

					if(i < right && line[i+1] >= '0' && line[i+1] <= '9'){
						tmp = 0;
						for(int k = i+1;k <=right && line[k] >= '0' && line[k] <= '9';k++){
							tmp = 10*tmp + line[k] - '0';
						}
					}else{
						tmp = 1;
					}

					ans += getW(work)*tmp;

					work_index = 0;
				}
			}
			i++;
		}
	}

	while(!S.empty()){
		ans += recursive(S.top().start+1,S.top().end-1)*S.top().multi;
		S.pop();
	}

	return ans;
}

bool find(char work[81]){
	for(int i = 0; i < V.size();i++){
		if(strCmp(V[i].name,work))return true;
	}
	return false;
}

void func(){
	int length,ans;
	for(length = 0; line[length] != '\0';length++);

	char work[81],work_index = 0;
	bool FLG = true;

	for(int i = 0; i < length;i++){
		if(line[i] >= 'A' && line[i] <= 'Z'){
			if(work_index == 0){
				work[work_index++] = line[i];
				work[work_index] = '\0';

				if(i == length-1){
					if(!find(work)){
						FLG = false;
						break;
					}
				}
			}else{

				if(!find(work)){
					FLG = false;
					break;
				}

				work_index = 0;
				work[work_index++] = line[i];
				work[work_index] = '\0';

				if(i == length-1){
					if(!find(work)){
						FLG = false;
						break;
					}
				}
			}
		}else if(line[i] >= 'a' && line[i] <= 'z'){
			work[work_index++] = line[i];
			work[work_index] = '\0';
			if(!find(work)){
				FLG = false;
				break;
			}
			work_index = 0;
		}else{
			if(work_index > 0){
				if(!find(work)){
					FLG = false;
					break;
				}
			}
			work_index = 0;
		}
	}

	if(!FLG){
		printf("UNKNOWN\n");
		return;
	}

	printf("%d\n",recursive(0,length-1));
}

int main(){

	int tmp;
	char buf[81];

	while(true){
		scanf("%s",buf);
		if(buf[0] == 'E' && buf[1] == 'N' && buf[2] == 'D')break;

		scanf("%d",&tmp);

		Info new_info;
		strcpy(new_info.name,buf);
		new_info.weight = tmp;
		V.push_back(new_info);
	}

	while(true){
		scanf("%s",line);
		if(line[0] == '0')break;

		func();
	}
    return 0;
}

Measured memory_bytes: 3312