#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m;
int s[3][1001], par[1001], cur[1001], was[1001];
string item[100], name[1000], type[100], clss[1000];
int atk[100], def[100], res[100], num[100], cnt[100];
vector<pair<int, int> > v[3];
int main() {
  cin >> n;
  for (int i = 0; i < n; i++)
    cin >> item[i] >> type[i] >> atk[i] >> def[i] >> res[i] >> num[i];
  cin >> m;
  for (int i = 0; i < m; i++) {
    string tmp;
    cin >> name[i] >> clss[i] >> par[i] >> tmp;
    int nc;
    if (clss[i] == "gladiator") nc = 0;
    if (clss[i] == "sentry") nc = 1;
    if (clss[i] == "physician") nc = 2;
    v[nc].push_back(make_pair(par[i], i));
    for (int j = 0; j < n; j++)
      if (tmp == item[j]) {
        cnt[j]++;
        cur[i] = j;
      }
  }
  int free = 0;
  for (int i = 0; i < n; i++)
    if (cnt[i] < num[i]) free = 1;
  if (free) {
    for (int i = 0; i < 3; i++) {
      sort((v[i]).begin(), (v[i]).end());
      reverse((v[i]).begin(), (v[i]).end());
    }
    s[0][0] = s[1][0] = s[2][0];
    for (int j = 0; j < 3; j++)
      for (int i = 0; i < ((int)(v[j]).size()); i++)
        s[j][i + 1] = s[j][i] + v[j][i].first;
    int a1 = -1, a2 = -1, a3 = -1, b1 = 0, b2 = 0, b3 = 0;
    for (int i = 0; i < n; i++)
      if (type[i] == "weapon")
        for (int j = 0; j < n; j++)
          if (type[j] == "armor")
            for (int k = 0; k < n; k++)
              if (type[k] == "orb") {
                int c1 = atk[i] + s[0][min(((int)(v[0]).size()), num[i])];
                int c2 = def[j] + s[1][min(((int)(v[1]).size()), num[j])];
                int c3 = res[k] + s[2][min(((int)(v[2]).size()), num[k])];
                if (c1 > a1 || c1 == a1 && c2 > a2 ||
                    c1 == a1 && c2 == a2 && c3 > a3) {
                  a1 = c1;
                  a2 = c2;
                  a3 = c3;
                  b1 = i;
                  b2 = j;
                  b3 = k;
                }
              }
    int rem = m;
    for (int i = 0; i < min(num[b1], ((int)(v[0]).size())); i++, rem--)
      was[v[0][i].second] = 1;
    for (int i = 0; i < min(num[b2], ((int)(v[1]).size())); i++, rem--)
      was[v[1][i].second] = 1;
    for (int i = 0; i < min(num[b3], ((int)(v[2]).size())); i++, rem--)
      was[v[2][i].second] = 1;
    int tmp = min(num[b1], ((int)(v[0]).size()));
    cout << item[b1] << " " << tmp + min(num[b1] - tmp, rem);
    for (int i = 0; i < num[b1] && i < ((int)(v[0]).size()); i++)
      cout << " " << name[v[0][i].second];
    for (int i = 0; i < m && tmp < num[b1]; i++)
      if (was[i] == 0) {
        was[i] = 1;
        tmp++;
        rem--;
        cout << " " << name[i];
      }
    cout << endl;
    tmp = min(num[b2], ((int)(v[1]).size()));
    cout << item[b2] << " " << tmp + min(num[b2] - tmp, rem);
    for (int i = 0; i < num[b2] && i < ((int)(v[1]).size()); i++)
      cout << " " << name[v[1][i].second];
    for (int i = 0; i < m && tmp < num[b2]; i++)
      if (was[i] == 0) {
        was[i] = 1;
        tmp++;
        rem--;
        cout << " " << name[i];
      }
    cout << endl;
    tmp = min(num[b3], ((int)(v[2]).size()));
    cout << item[b3] << " " << tmp + min(num[b3] - tmp, rem);
    for (int i = 0; i < num[b3] && i < ((int)(v[2]).size()); i++)
      cout << " " << name[v[2][i].second];
    for (int i = 0; i < m && tmp < num[b3]; i++)
      if (was[i] == 0) {
        was[i] = 1;
        tmp++;
        rem--;
        cout << " " << name[i];
      }
    cout << endl;
  } else {
    for (int i = 0; i < ((int)(v[0]).size()); i++)
      atk[cur[v[0][i].second]] += v[0][i].first;
    for (int i = 0; i < ((int)(v[1]).size()); i++)
      def[cur[v[1][i].second]] += v[1][i].first;
    for (int i = 0; i < ((int)(v[2]).size()); i++)
      res[cur[v[2][i].second]] += v[2][i].first;
    int a1 = -1, a2 = -1, a3 = -1, b1 = 0, b2 = 0, b3 = 0;
    for (int i = 0; i < n; i++)
      if (type[i] == "weapon")
        for (int j = 0; j < n; j++)
          if (type[j] == "armor")
            for (int k = 0; k < n; k++)
              if (type[k] == "orb") {
                int c1 = atk[i];
                int c2 = def[j];
                int c3 = res[k];
                if (c1 > a1 || c1 == a1 && c2 > a2 ||
                    c1 == a1 && c2 == a2 && c3 > a3) {
                  a1 = c1;
                  a2 = c2;
                  a3 = c3;
                  b1 = i;
                  b2 = j;
                  b3 = k;
                }
              }
    cout << item[b1] << " " << num[b1];
    for (int i = 0; i < m; i++)
      if (cur[i] == b1) cout << " " << name[i];
    cout << endl;
    cout << item[b2] << " " << num[b2];
    for (int i = 0; i < m; i++)
      if (cur[i] == b2) cout << " " << name[i];
    cout << endl;
    cout << item[b3] << " " << num[b3];
    for (int i = 0; i < m; i++)
      if (cur[i] == b3) cout << " " << name[i];
    cout << endl;
  }
  return 0;
}
