#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int data[100],cnt,customer,total,now[5],end_item[5];
int now_type,end_type,now_num,end_num,now_max,end_max;
bool none,tie;
int get_type(int a[],int n){
sort(a,a+n);
int type = 0,i,j;
if(n>0)type = 1;
for(i=1;i<n;i++){
if(a[i]!=a[i-1])
type++;
}
return type;
}
int get_max(int a[],int n){
int i,max_a = -9999;
for(i=0;i<n;i++){
if(max_a<data[a[i]]){
max_a = data[a[i]];
}
}
return max_a;
}
void compare(){
int i;
now_type = get_type(now,now_num);
now_max = get_max(now,now_num);
end_type = get_type(end_item,end_num);
end_max = get_max(end_item,end_num);
if(end_num==0||now_type>end_type||(now_type==end_type&&now_num<end_num)||(now_type==end_type&&now_num==end_num&&now_max>end_max)){
tie = false;
end_num = now_num;
for(i=0;i<end_num;i++){
end_item[i] = now[i];
}
}
if(end_num==now_num&&end_type==now_type&&end_max==now_max){
tie = true;
}
}
void dps(int n,int value){
int i;
if(value>customer)return;
if(value==customer){
none = false;
now_num = total;
compare();
}
if(total==4)return;
for(i=n;i<cnt;i++){
now[total] = i;
total++;
dps(i,value+data[i]);
total--;
}
}
void print(){
printf("%d ",customer);
if(none){
printf("---- none\n");
return;
}
end_type = get_type(end_item,end_num);
if(tie){
printf("(%d): tie\n",end_type);
return;
}
printf("(%d): ",end_type);
int i;
for(i=0;i<end_num-1;i++){
printf("%d ",data[end_item[i]]);
}
printf("%d\n",data[end_item[i]]);
}
int main(){
char suffix[100];
while(true){
cnt = 0;
memset(data,0,sizeof(data));
while(true){
if(scanf("%d",&data[cnt])==EOF)return 1;
if(data[cnt]==0)break;
cnt++;
}
gets(suffix);
sort(data,data+cnt);
while(true){
memset(now,0,sizeof(now));
memset(end_item,0,sizeof(end_item));
scanf("%d",&customer);
if(customer==0)break;
none = true;
tie = false;
total = 0;
end_num = 0;
dps(0,0);
print();
}
gets(suffix);
}
return 0;
}