#include <bits/stdc++.h>
using namespace std;
map<string, pair<pair<int, int>, vector<string> > > ai;
map<string, pair<int, string> > ar;
map<string, int> ti, tr;
vector<string> atki, defi, resi;
vector<string> atkr, defr, resr;
set<string> v;
int n, m, sz;
bool cmp(const string& a, const string& b) { return ar[a].first > ar[b].first; }
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string nam, cla;
    int atk, def, res, siz;
    cin >> nam >> cla >> atk >> def >> res >> siz;
    if (cla == "weapon")
      ai[nam].first = make_pair(atk, siz), atki.push_back(nam), ti[nam] = 1;
    else if (cla == "armor")
      ai[nam].first = make_pair(def, siz), defi.push_back(nam), ti[nam] = 2;
    else if (cla == "orb")
      ai[nam].first = make_pair(res, siz), resi.push_back(nam), ti[nam] = 3;
    sz += siz;
  }
  cin >> m;
  for (int i = 0; i < m; i++) {
    string nam, cla;
    int num;
    string hom;
    cin >> nam >> cla >> num >> hom;
    if (cla == "gladiator")
      ar[nam] = make_pair(num, hom), atkr.push_back(nam),
      ai[hom].second.push_back(nam), tr[nam] = 1;
    else if (cla == "sentry")
      ar[nam] = make_pair(num, hom), defr.push_back(nam),
      ai[hom].second.push_back(nam), tr[nam] = 2;
    else if (cla == "physician")
      ar[nam] = make_pair(num, hom), resr.push_back(nam),
      ai[hom].second.push_back(nam), tr[nam] = 3;
  }
  sort(atkr.begin(), atkr.end(), cmp), sort(defr.begin(), defr.end(), cmp),
      sort(resr.begin(), resr.end(), cmp);
  int atks = -1, defs = -1, ress = -1;
  string atkn, defn, resn;
  if (sz == m) {
    for (int i = 0; i < (int)atki.size(); i++) {
      int a = ai[atki[i]].first.first;
      for (int j = 0; j < (int)ai[atki[i]].second.size(); j++)
        if (ti[atki[i]] == tr[ai[atki[i]].second[j]])
          a += ar[ai[atki[i]].second[j]].first;
      if (a > atks) atks = a, atkn = atki[i];
    }
    for (int i = 0; i < (int)defi.size(); i++) {
      int a = ai[defi[i]].first.first;
      for (int j = 0; j < (int)ai[defi[i]].second.size(); j++)
        if (ti[defi[i]] == tr[ai[defi[i]].second[j]])
          a += ar[ai[defi[i]].second[j]].first;
      if (a > defs) defs = a, defn = defi[i];
    }
    for (int i = 0; i < (int)resi.size(); i++) {
      int a = ai[resi[i]].first.first;
      for (int j = 0; j < (int)ai[resi[i]].second.size(); j++)
        if (ti[resi[i]] == tr[ai[resi[i]].second[j]])
          a += ar[ai[resi[i]].second[j]].first;
      if (a > ress) ress = a, resn = resi[i];
    }
    cout << atkn << " " << (int)ai[atkn].second.size();
    for (int i = 0; i < (int)ai[atkn].second.size(); i++)
      cout << " " << ai[atkn].second[i];
    cout << endl;
    cout << defn << " " << (int)ai[defn].second.size();
    for (int i = 0; i < (int)ai[defn].second.size(); i++)
      cout << " " << ai[defn].second[i];
    cout << endl;
    cout << resn << " " << (int)ai[resn].second.size();
    for (int i = 0; i < (int)ai[resn].second.size(); i++)
      cout << " " << ai[resn].second[i];
    cout << endl;
    return 0;
  }
  for (int i = 0; i < (int)atki.size(); i++) {
    int a = ai[atki[i]].first.first;
    for (int j = 0; j < min((int)atkr.size(), ai[atki[i]].first.second); j++)
      a += ar[atkr[j]].first;
    if (a > atks) atks = a, atkn = atki[i];
  }
  for (int i = 0; i < (int)defi.size(); i++) {
    int a = ai[defi[i]].first.first;
    for (int j = 0; j < min((int)defr.size(), ai[defi[i]].first.second); j++)
      a += ar[defr[j]].first;
    if (a > defs) defs = a, defn = defi[i];
  }
  for (int i = 0; i < (int)resi.size(); i++) {
    int a = ai[resi[i]].first.first;
    for (int j = 0; j < min((int)resr.size(), ai[resi[i]].first.second); j++)
      a += ar[resr[j]].first;
    if (a > ress) ress = a, resn = resi[i];
  }
  ai[atkn].second.clear();
  for (int i = 0; i < min((int)atkr.size(), ai[atkn].first.second); i++)
    ai[atkn].second.push_back(atkr[i]), v.insert(atkr[i]);
  ai[defn].second.clear();
  for (int i = 0; i < min((int)defr.size(), ai[defn].first.second); i++)
    ai[defn].second.push_back(defr[i]), v.insert(defr[i]);
  ai[resn].second.clear();
  for (int i = 0; i < min((int)resr.size(), ai[resn].first.second); i++)
    ai[resn].second.push_back(resr[i]), v.insert(resr[i]);
  for (map<string, pair<int, string> >::iterator i = ar.begin(); i != ar.end();
       i++)
    if (v.find(i->first) == v.end()) {
      v.insert(i->first);
      if (ai[atkn].first.second > (int)ai[atkn].second.size()) {
        ai[atkn].second.push_back(i->first);
        continue;
      }
      if (ai[defn].first.second > (int)ai[defn].second.size()) {
        ai[defn].second.push_back(i->first);
        continue;
      }
      if (ai[resn].first.second > (int)ai[resn].second.size()) {
        ai[resn].second.push_back(i->first);
        continue;
      }
    }
  cout << atkn << " " << (int)ai[atkn].second.size();
  for (int i = 0; i < (int)ai[atkn].second.size(); i++)
    cout << " " << ai[atkn].second[i];
  cout << endl;
  cout << defn << " " << (int)ai[defn].second.size();
  for (int i = 0; i < (int)ai[defn].second.size(); i++)
    cout << " " << ai[defn].second[i];
  cout << endl;
  cout << resn << " " << (int)ai[resn].second.size();
  for (int i = 0; i < (int)ai[resn].second.size(); i++)
    cout << " " << ai[resn].second[i];
  cout << endl;
  return 0;
}
