#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
struct nation{
int gold;
int medal;
int population;
};
int main() {
int n,m;
cin>>n>>m;
vector<nation> a(n);
for (int i = 0; i < n; ++i) {
cin>>a[i].gold>>a[i].medal>>a[i].population;
}
vector<int> seq(m);
for (int i = 0; i < m; ++i) {
cin>>seq[i];
}
map<int,vector<int>> rank;
for (int i = 0; i < n; ++i) {
int grank=1;
for (int j = 0; j <n; ++j) {
if (a[i].gold<a[j].gold) grank++;
}
rank[i].push_back(grank);
}
for (int i = 0; i < n; ++i) {
int grank=1;
for (int j = 0; j <n; ++j) {
if (a[i].medal<a[j].medal) grank++;
}
rank[i].push_back(grank);
}
for (int i = 0; i < n; ++i) {
int grank=1;
double grate1=(double)a[i].gold/a[i].population;
if (a[i].gold==0&&a[i].population==0) grate1=0;
else if (a[i].gold!=0&&a[i].population==0) grate1=1000;
for (int j = 0; j <n; ++j) {
double grate2=(double)a[j].gold/a[j].population;
if (a[j].gold==0&&a[j].population==0) grate2=0;
else if (a[j].gold!=0&&a[j].population==0) grate2=1000;
if (grate1<grate2) grank++;
}
rank[i].push_back(grank);
}
for (int i = 0; i < n; ++i) {
int grank=1;
double grate1=(double)a[i].medal/a[i].population;
if (a[i].medal==0&&a[i].population==0) grate1=0;
else if (a[i].medal!=0&&a[i].population==0) grate1=1000;
for (int j = 0; j <n; ++j) {
double grate2=(double)a[j].medal/a[j].population;
if (a[j].medal==0&&a[j].population==0) grate2=0;
else if (a[j].medal!=0&&a[j].population==0) grate2=1000;
if (grate1<grate2) grank++;
}
rank[i].push_back(grank);
}
for (int i = 0; i < m; ++i) {
int min=0;
for (int j = 0; j <4; ++j) {
if (rank[seq[i]][j]<rank[seq[i]][min])
min=j;
}
cout<<rank[seq[i]][min]<<":"<<min+1<<endl;
}
return 0;
}