#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <fstream>

using namespace std;


struct Magic{
	string name;
	int mp;
	bool isAll;
	int dmg;
};

int n;
int hps[101];
int m;
Magic magics[101];
const int INF=1000000000;

// SÌÉ é_[Wð^¦éÌÉKvÈÅ¬ÌMP(¶ÝµÈ¯êÎ-1)
int dp[2][200001];
// PÌÉ é_[Wð^¦éÌÉKvÈÅ¬MP(¿å¤ÇÌ_[WÅÈ­Äàæ¢
int dp2[2][200001];

int main(){
	while(cin>>n&&n){
		vector<Magic> allMagics;
		vector<Magic> singleMagics;
		vector<Magic> crit;
		for(int i=0;i<n;i++)cin>>hps[i];
		cin>>m;
		for(int i=0;i<m;i++){
			cin>>magics[i].name>>magics[i].mp;
			string tgt;
			cin>>tgt;
			if(tgt=="All")magics[i].isAll=true;
			else magics[i].isAll=false;
			cin>>magics[i].dmg;
			if(magics[i].dmg==0)continue;
			else if(magics[i].isAll){
				// 100000ÈãÌêAêKE
				if(magics[i].dmg>=100000)crit.push_back(magics[i]);
				else allMagics.push_back(magics[i]);
			}
			else singleMagics.push_back(magics[i]);
		}
		int minMP=INF;
		// êKE
		for(int i=0;i<(int)crit.size();i++)minMP=min(minMP,crit[i].mp);
		for(int i=0;i<2;i++)for(int j=0;j<=200000;j++)dp[i][j]=dp2[i][j]=INF;
		dp[(allMagics.size())%2][0]=0;
		dp2[(singleMagics.size())%2][0]=0;
		for(int i=allMagics.size()-1;i>=0;i--){
			for(int j=0;j<=200000;j++){
				int dmg=j;
				int pos=i;
				int res=INF;
				int cur=(i+1)%2;
				int nxt=i%2;
				res=min(res,dp[cur][dmg]);
				// ¿å¤Ç0ÉÈéKvª é
				if(dmg-allMagics[pos].dmg>=0)
					res=min(res,dp[nxt][dmg-allMagics[pos].dmg]+allMagics[pos].mp);
				dp[nxt][dmg]=res;
			}
		}
		for(int i=singleMagics.size()-1;i>=0;i--){
			for(int j=0;j<=200000;j++){
				int dmg=j;
				int pos=i;
				int res=INF;
				int cur=(i+1)%2;
				int nxt=i%2;
				res=min(res,dp2[cur][dmg]);
				if(dmg-singleMagics[pos].dmg>=0)
					res=min(res,dp2[nxt][dmg-singleMagics[pos].dmg]+singleMagics[pos].mp);
				// KvÈÌÍ¡ñÌªÌÝ
				else res=min(res,singleMagics[pos].mp);
				dp2[nxt][dmg]=res;
			}
		}
		// SÌÉ^¦é_[WÊðvZ
		for(int i=0;i<=200000;i++){
			if(dp[0][i]==INF)continue;
			int cnt=0;
			bool no=false;
			for(int j=0;j<n;j++){
				int a=hps[j]-i;
				if(a>0){
					if(dp2[0][a]==INF){
						no=true;
						break;
					}
					cnt+=dp2[0][a];
				}
			}
			if(no)continue;
			minMP=min(minMP,cnt+dp[0][i]);
		}
		cout<<minMP<<endl;
	}
	return 0;
}