#include <algorithm>
#include <iostream>
using namespace std;
struct out{
int rank; //0:金牌总数 1奖牌总数 2金牌人口比 3奖牌人口比
int type;//1金牌总数 2奖牌总数 3金牌人口比 4奖牌人口比
};
//国家结构体
struct country{
int numb; //国家号
int glod; //金牌总数
int sum; //奖牌总数
double person; //人口数量,为什么用double类型,因为后续初始化时g_p=glod/person; 若glod和person都是整数,则运算结果也是整数,导致丢失精度
double g_p; //金牌人口比例
double s_p; //奖牌人口比例
out os[4]; //用来存储四种排名方式下,自己的排名;
};
//cmp方法:用于对每个国家中os数组进行排序(不同方式下的rank从小到大排)
bool cmp(const out& a,const out& b){ // 如果使用stable_sort()排序,参数一定要有const修饰
if(a.rank==b.rank){
return a.type<b.type;
}
return a.rank<b.rank;
}
//按金牌数
bool comparator01(country& a,country& b){
return a.glod>b.glod;
}
//按奖牌数
bool comparator02(country& a,country& b){
return a.sum>b.sum;
}
//按金牌人口比例
bool comparator03(country& a,country& b){
return a.g_p>b.g_p;
}
//按将牌人口比例
bool comparator04(country& a,country& b){
return a.s_p>b.s_p;
}
int main() {
int n, m;
while (cin >> n >> m) {
country c[n];//国家结构体数组
int numb[m];//M个国家号
//初始化每个国家的信息
for(int i=0;i<n;i++){
cin>>c[i].glod >>c[i].sum >>c[i].person;
c[i].g_p=c[i].glod/c[i].person;
c[i].s_p=c[i].sum/c[i].person;
c[i].numb=i;
}
//初始化
for(int i=0;i<m;i++){
cin>>numb[i];
}
//按金牌数排序
sort(c, c+n,comparator01);
//将该排名方式下,每个国家的位次存进os数组
c[0].os[0].rank=1;
c[0].os[0].type = 1;
for(int i=1;i<n;i++){
//并列名词要特殊处理;若前两个国家并列第1,那么下个国家就是第3名,而不是第2;
if(c[i].glod==c[i-1].glod){
c[i].os[0].rank=c[i-1].os[0].rank;
}else {
c[i].os[0].rank=i+1;
}
c[i].os[0].type=1;
}
//按奖牌数排序
sort(c, c+n,comparator02);
c[0].os[1].rank=1;
c[0].os[1].type = 2;
for(int i=1;i<n;i++){
if(c[i].sum==c[i-1].sum){
c[i].os[1].rank=c[i-1].os[1].rank;
}else {
c[i].os[1].rank=i+1;
}
c[i].os[1].type=2;
}
//按金牌人口比例排序
sort(c, c+n,comparator03);
c[0].os[2].rank=1;
c[0].os[2].type = 3;
for(int i=1;i<n;i++){
if(c[i].g_p==c[i-1].g_p){
c[i].os[2].rank=c[i-1].os[2].rank;
}else {
c[i].os[2].rank=i+1;
}
c[i].os[2].type=3;
}
//按奖牌人口比例排序
sort(c, c+n,comparator04);
c[0].os[3].rank=1;
c[0].os[3].type = 4;
for(int i=1;i<n;i++){
if(c[i].s_p==c[i-1].s_p){
c[i].os[3].rank=c[i-1].os[3].rank;
}else {
c[i].os[3].rank=i+1;
}
c[i].os[3].type=4;
}
for(int j=0;j<m;j++){
for(int i=0;i<n;i++){
//对题中给的M个国家号对应的国家结构体中的os进行排序
if(c[i].numb==numb[j]){
stable_sort(c[i].os, c[i].os+4, cmp);
//排完序后,索引为0 的位次就是最靠前的位次,以及其对应的排名方式;
cout<<c[i].os[0].rank<<":"<<c[i].os[0].type<<endl;
}
}
}
cout<<"\n";
}
}