#include <bits/stdc++.h> //头文件
using namespace std; //命名空间
const int N = 1e6; //定义常数N
struct player{ //定义结构体player
int a,b,c,d;//定义4个变量
}p[N];
const int H[15]={0, -50, -2, -3, -4, -5, -6, -7, -8, -9, -10, -20, -30, -40}; //反正都是定义
const int S12 = -100;//定义
const int D11 = 100;//定义
vector <string> s;//定义一个动态数组s
int solve(){ //定义
int score = 0;//定义
int Hnum = 0;//定义
int S12P = 0;//定义
int D11P = 0;//定义
int C10P = 0;//定义
for(int i = 0; i < s.size(); i++){//好啦开启循环
string ss = s[i];
if(ss[0] == 'H')Hnum++; //判断空数组是否等于H,成立Hnum++
else if(ss == "S12")S12P++;//判断
else if(ss == "D11")D11P++;//判断
else if(ss == "C10")C10P++;//判断
}
if(Hnum == 13){ //模拟出所有可能
score = 200;
if(S12P && D11P) //模拟
score = 500;
else if(S12P)//模拟
score += S12;
else if(D11P)//模拟
score += D11;
}else{//模拟
for(int i = 0; i < s.size(); i++){ //循环
string ss = s[i];
if(ss[0] == 'H'){
int point = 0;
for(int j = 1; j < ss.size(); j++){
point = point * 10 + ss[j] - '0';
}
score += H[point];
}
}
if(S12P)//模拟
score += S12;
if(D11P)//模拟
score += D11;
}
if(s.size() == 1 && C10P)//模拟
score = 50;
else if(s.size() > 1 && C10P)//模拟
score *= 2;
return score;
}
int main(){
int n,len =1;//定义
while(1){ //死循环
int cnt0 = 0;
for(int i = 1; i <= 4; i++){
cin >> n;
if(n==0)cnt0++;
s.clear();
string pocker;
for(int j = 1; j <= n; j++){
cin >> pocker;
s.push_back(pocker);
}
int score = solve();
if(i==1) p[len].a=score;
if(i==2) p[len].b=score;
if(i==3) p[len].c=score;
if(i==4) p[len].d=score;
}
len++;
if(cnt0 == 4) break;//跳出循环
}
for(int i = 1; i < len - 1; i++){ //开始较难的输出
if(p[i].a>0) cout << "+";
cout << p[i].a << " ";
if(p[i].b>0) cout << "+";
cout << p[i].b << " ";
if(p[i].c>0) cout << "+";
cout << p[i].c << " ";
if(p[i].d>0) cout << "+";
cout << p[i].d << " ";
cout << endl;
}
return 0;//华丽结尾
}