#include <cstdio>
#include <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <fstream>
#include <algorithm>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <complex>
#include <iterator>
#include <cstdlib>
#include <cstring>
#include <sstream>

using namespace std;

#define EPS (1e-10)
#define EQ(a,b) (abs((a) - (b)) < EPS)
#define EQV(a,b) (EQ((a).real(),(b).real()) && EQ((a).imag(),(b).imag()))

typedef complex<double> P;
typedef long long ll;

const double PI=4*atan(1.0);
const int MAX_SIZE = 10000;

map<string,int> atomTable;
bool no;

ll analysis(string str){
    if(str=="")return 0;
    if(atomTable.find(str)!=atomTable.end())return atomTable[str];
    // Ê+Æ¢¤gÝí¹¾Á½ê
    if(str[0]=='('){
        int cnt=1;
        int i=0;
        for(i = 1; i < str.size(); i++){
            if(str[i]=='(')cnt++;
            else if(str[i]==')')cnt--;
            // ÊÌOÉo½
            if(cnt==0){
                break;
            }
        }
        if(cnt==0&&i==str.size()-1)
            return analysis(str.substr(1,str.size()-2));
        else{
            // cèÌvfªÇÌöx©
            int cur=i+1;
            while(cur<str.size()&&str[cur]>='0'&&str[cur]<='9')cur++;
            if(cur==i+1)return (ll)analysis(str.substr(1,str.size()-2));
            else{
                // cèÌvf

                int co=atoi(str.substr(i+1,cur-i-1).c_str());
                return (ll)analysis(str.substr(1,i-1))*co + (ll)analysis(str.substr(cur));
            }
            //if(cur==str.size()){
            //    int co=atoi(str.substr(i+1).c_str());
            //    return (ll)analysis(str.substr(1,i-1))*co;
            //}
            //else{

            //}
        }
    }
    // ÊÌOÉ éAgð©Â¯é
    int cnt=0;
    for(int i = 0; i < str.size(); i++){
        if(no)return 0;
        if(str[i]=='(')cnt++;
        else if(str[i]==')')cnt--;
        else if(cnt==0&&str[i]>='A'&&str[i]<='Z'){
            // ñ¶êvÌê
            if(i<str.size()-1&&str[i+1]>='a'&&str[i]<='z'){
                // ÊÌOÉAt@xbgð­©µ½çAQ¶©P¶Åõ
                if(atomTable.find(str.substr(i,2))==atomTable.end()){
                    no=true;
                    return 0;
                }
                else{
                    // ðØèæèAE×ÉªÈ¢©ð`FbN
                    int cur=i+2;
                    while(cur<str.size()&&str[cur]>='0'&&str[cur]<='9')cur++;
                    if(cur==i+2)
                        return (ll)analysis(str.substr(0,i))
                        + (ll)atomTable[str.substr(i,2)] + (ll)analysis(str.substr(i+2));
                    else{
                        // Wð©¯é
                        int co=atoi(str.substr(i+2,cur-i-2).c_str());
                        return (ll)analysis(str.substr(0,i))
                            + (ll)atomTable[str.substr(i,2)]*co + (ll)analysis(str.substr(cur));
                    }
                }
            }
            // ê¶êvÌê
            else{
                // ¶Ý·é©`FbN
                if(atomTable.find(str.substr(i,1))==atomTable.end()){
                    no=true;
                    return 0;
                }
                else{
                    // ðØèæèAE×ÉªÈ¢©ð`FbN
                    int cur=i+1;
                    while(cur<str.size()&&(str[cur]>='0'&&str[cur]<='9'))cur++;
                    if(cur==i+1)
                        return (ll)analysis(str.substr(0,i))
                        + (ll)atomTable[str.substr(i,1)] + (ll)analysis(str.substr(i+1));
                    else{
                        // Wð©¯é
                        int co=atoi(str.substr(i+1,cur-i-1).c_str());
                        return (ll)analysis(str.substr(0,i))
                            + (ll)atomTable[str.substr(i,1)]*co + (ll)analysis(str.substr(cur));
                    }
                }
            }
        }
    }
}

int main(){

    string atom;
    int weight;
    while(cin>>atom&&atom!="END_OF_FIRST_PART"){
        cin>>weight;
        atomTable[atom]=weight;
    }
    string mol;
    while(cin>>mol&&mol!="0"){
        no=false;
        ll score=analysis(mol);
        if(no)cout<<"UNKNOWN"<<endl;
        else cout<<score<<endl;
    }

    return 0;
}

Measured memory_bytes: 0