#include <bits/stdc++.h>
using namespace std;
template <class A, class B>
A cvt(B x) {
  stringstream ss;
  ss << x;
  A y;
  ss >> y;
  return y;
}
typedef struct {
  string name;
  int c;
  int p[3];
  int size;
  int room;
} item;
typedef struct {
  string name;
  int c;
  int bonus;
  string home;
} resident;
int n, k;
map<string, item> items;
map<string, vector<string> > itres;
map<string, resident> residents;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string name, c;
    int a, d, r, s;
    cin >> name >> c >> a >> d >> r >> s;
    if (c == "weapon") items[name] = (item){name, 0, {a, d, r}, s, s};
    if (c == "armor") items[name] = (item){name, 1, {a, d, r}, s, s};
    if (c == "orb") items[name] = (item){name, 2, {a, d, r}, s, s};
  }
  cin >> k;
  for (int i = 0; i < k; i++) {
    string name, c, home;
    int b;
    cin >> name >> c >> b >> home;
    if (c == "gladiator") residents[name] = (resident){name, 0, b, home};
    if (c == "sentry") residents[name] = (resident){name, 1, b, home};
    if (c == "physician") residents[name] = (resident){name, 2, b, home};
    items[home].room--;
    itres[home].push_back(name);
  }
  int move = 0;
  for (typeof(items.begin()) it = items.begin(); it != items.end(); it++)
    if (it->second.room > 0) move = 1;
  if (!move) {
    vector<pair<int, pair<int, string> > > v;
    for (typeof(items.begin()) it = items.begin(); it != items.end(); it++) {
      string name = it->first;
      int cl = it->second.c;
      int val = it->second.p[cl];
      for (typeof(itres[name].begin()) itr = itres[name].begin();
           itr != itres[name].end(); itr++) {
        if (residents[*itr].c == cl) val += residents[*itr].bonus;
      }
      v.push_back(make_pair(cl, make_pair(-val, name)));
    }
    sort(v.begin(), v.end());
    int i = 0;
    for (int t = 0; t < 3; t++) {
      while (v[i].first != t) i++;
      string name = v[i].second.second;
      cout << name << " " << itres[name].size();
      for (typeof(itres[name].begin()) itr = itres[name].begin();
           itr != itres[name].end(); itr++)
        cout << " " << *itr;
      cout << endl;
    }
  } else {
    vector<pair<int, string> > r[3];
    for (typeof(residents.begin()) itr = residents.begin();
         itr != residents.end(); itr++) {
      r[itr->second.c].push_back(make_pair(itr->second.bonus, itr->first));
    }
    int sum[3][1005];
    for (int t = 0; t < 3; t++) {
      sort(r[t].begin(), r[t].end());
      reverse(r[t].begin(), r[t].end());
      sum[t][0] = 0;
      for (int i = 1; i <= r[t].size(); i++) {
        sum[t][i] = sum[t][i - 1] + r[t][i - 1].first;
      }
    }
    pair<int, pair<int, int> > best = make_pair(-1, make_pair(-1, -1));
    pair<string, vector<string> > out[3];
    set<string> used;
    for (typeof(items.begin()) it0 = items.begin(); it0 != items.end(); it0++)
      if (it0->second.c == 0)
        for (typeof(items.begin()) it1 = items.begin(); it1 != items.end();
             it1++)
          if (it1->second.c == 1)
            for (typeof(items.begin()) it2 = items.begin(); it2 != items.end();
                 it2++)
              if (it2->second.c == 2) {
                int sz0 = min(it0->second.size, (int)r[0].size());
                int sz1 = min(it1->second.size, (int)r[1].size());
                int sz2 = min(it2->second.size, (int)r[2].size());
                pair<int, pair<int, int> > rez =
                    make_pair(it0->second.p[0] + sum[0][sz0],
                              make_pair(it1->second.p[1] + sum[1][sz1],
                                        it2->second.p[2] + sum[2][sz2]));
                if (rez > best) {
                  best = rez;
                  used.clear();
                  vector<string> x0, x1, x2;
                  for (int i = 0; i < sz0; i++) {
                    x0.push_back(r[0][i].second);
                    used.insert(r[0][i].second);
                  }
                  for (int i = 0; i < sz1; i++) {
                    x1.push_back(r[1][i].second);
                    used.insert(r[1][i].second);
                  }
                  for (int i = 0; i < sz2; i++) {
                    x2.push_back(r[2][i].second);
                    used.insert(r[2][i].second);
                  }
                  out[0] = make_pair(it0->first, x0);
                  out[1] = make_pair(it1->first, x1);
                  out[2] = make_pair(it2->first, x2);
                }
              }
    for (int t = 0; t < 3; t++) {
      for (typeof(residents.begin()) itr = residents.begin();
           itr != residents.end(); itr++) {
        if (out[t].second.size() == items[out[t].first].size) break;
        if (used.count(itr->first) == 0) {
          out[t].second.push_back(itr->first);
          used.insert(itr->first);
        }
      }
      cout << out[t].first << " " << out[t].second.size();
      for (int i = 0; i < out[t].second.size(); i++)
        cout << " " << out[t].second[i];
      cout << endl;
    }
  }
  return 0;
}
