#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
/*
输入描述:
有多组数据。 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。
 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。 接下来一行给出M个国家号。
输出描述:
排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名
 格式为: 排名:排名方式 如果有相同的最终排名,则输出排名方式最小的那种排名,对于排名方式,金牌总数 < 奖牌总数 < 金牌人口比例 < 奖牌人口比例
 如果有并列排名的情况,即如果出现金牌总数为 100,90,90,80.则排名为1,2,2,4. 每组数据后加一个空行。
 */
struct country{
    float  gold_medal;
    float all_medal;
    float population;
    int seq;//额外多定义一个国家号,方便
};
bool cmp1(country c1,country c2){//第一种比较方式
    return c1.gold_medal>c2.gold_medal;
}
bool cmp2(country c1,country c2){//第2种比较方式
    return c1.all_medal>c2.all_medal;
}
bool cmp3(country c1,country c2){//第3种比较方式
    return (c1.gold_medal/c1.population)>(c2.gold_medal/c2.population);
}
bool cmp4(country c1,country c2){//第4种比较方式
    return (c1.all_medal/c1.population)>(c2.all_medal/c2.population);
}
bool isamongvec2(int x,vector<int> vec11){
    for(int i=0;i<vec11.size();i++){
        if(x == vec11[i]){
            return true;
        }
    }
    return false;
}
int main(){
    int n,m;
    while(cin>>n>>m) {
        vector<country> vec(n);
        vector<int> vec2(m);
        for (int i = 0; i < n; i++) {//输入各个国家信息
            cin>>vec[i].gold_medal>>vec[i].all_medal>>vec[i].population;
            vec[i].seq=i;
        }
        for(int i=0;i<m;i++){//输入待排的国家号
            cin>>vec2[i];
        }
        /*********************************************/
        int a[4][n];
        sort(vec.begin(),vec.end(),cmp1);//第一种排序方式
        for(int i=0;i<n;i++){
            if(i>0 &&(vec[i].gold_medal == vec[i-1].gold_medal)){//如果排名相同
                a[0][vec[i].seq]=a[0][vec[i-1].seq];
            }
            else a[0][vec[i].seq]=i+1;//记录下排名
        }
        /*********************************************/
        sort(vec.begin(),vec.end(),cmp2);//第二种排序方式
        for(int i=0;i<n;i++){
            if(i>0 &&(vec[i].all_medal == vec[i-1].all_medal)){//如果排名相同
                a[1][vec[i].seq]=a[1][vec[i-1].seq];
            }
            else a[1][vec[i].seq]=i+1;//记录下排名
        }
        /*********************************************/
        sort(vec.begin(),vec.end(),cmp3);//第三种排序方式
        for(int i=0;i<n;i++){
            if(i>0 && (vec[i].gold_medal/vec[i].population) == (vec[i-1].gold_medal/vec[i-1].population) ){//如果排名相同
                a[2][vec[i].seq]=a[2][vec[i-1].seq];
            }
            else a[2][vec[i].seq]=i+1;//记录下排名
        }
        /*********************************************/
        sort(vec.begin(),vec.end(),cmp4);//第四种排序方式
        for(int i=0;i<n;i++){
            if(i>0 && (vec[i].all_medal/vec[i].population)==(vec[i-1].all_medal/vec[i-1].population) ){//如果排名相同
                a[3][vec[i].seq]=a[3][vec[i-1].seq];
            }
            else a[3][vec[i].seq]=i+1;//记录下排名
        }
        int best_rank,method;
        for(int i=0;i<n;i++){
            for(int j=0;j<4;j++){
                if(j == 0){
                    best_rank=a[j][i];
                    method=j+1;
                }
                else{
                    if(a[j][i] < best_rank){
                        best_rank=a[j][i];
                        method=j+1;
                    }
                }
            }
            if(isamongvec2(i,vec2) ){
                cout<<best_rank<<":"<<method<<endl;
            }
        }
        cout<<endl;
    }
    return 0;
}

感觉像是屎山。。。。