#include <bits/stdc++.h>
using namespace std;
map<string, int> th;
map<string, int> rs;
struct thing {
  string name;
  int cl;
  int atk, def, res;
  int size;
  vector<int> resid;
  int full;
  void read(int id) {
    full = 0;
    cin >> name;
    string s;
    cin >> s;
    if (s == "weapon")
      cl = 1;
    else if (s == "armor")
      cl = 2;
    else
      cl = 3;
    cin >> atk >> def >> res >> size;
    th[name] = id;
  }
};
thing a[200];
struct resident {
  string name;
  int typ;
  string home;
  int bonus;
  int id;
  void read(int _id) {
    cin >> name;
    string s;
    cin >> s;
    if (s == "gladiator")
      typ = 1;
    else if (s == "sentry")
      typ = 2;
    else
      typ = 3;
    cin >> bonus;
    cin >> home;
    int x = th[home];
    rs[name] = _id;
    a[x].resid.push_back(_id);
    a[x].full++;
    id = _id;
  }
};
resident x[2200];
int n;
int m;
int empty = 1;
vector<int> ans[3];
int anss[4];
int xx[4];
int used[2210];
vector<resident> tt[4];
void update(int i, int j, int k) {
  if (empty) {
    int cur[4];
    memset(cur, 0, sizeof(cur));
    int px[3];
    px[0] = i, px[1] = j, px[2] = k;
    for (int t = 0; t < 3; t++) {
      int tek = px[t];
      if (a[tek].cl == 1) cur[1] += a[tek].atk;
      if (a[tek].cl == 2) cur[2] += a[tek].def;
      if (a[tek].cl == 3) cur[3] += a[tek].res;
      for (int i = 0; i < a[tek].resid.size(); i++)
        if (a[tek].cl == x[a[tek].resid[i]].typ)
          cur[a[tek].cl] += x[a[tek].resid[i]].bonus;
    }
    int ok = 0;
    for (int i = 1; i < 4; i++)
      if (cur[i] > anss[i]) {
        ok = 1;
        break;
      } else if (cur[i] < anss[i])
        break;
    if (ok) {
      for (int i = 1; i < 4; i++) anss[i] = cur[i];
      xx[1] = i, xx[2] = j, xx[3] = k;
      for (int i = 0; i < 3; i++) {
        ans[i].clear();
        int tek = px[i];
        for (int j = 0; j < a[tek].resid.size(); j++)
          ans[i].push_back(a[tek].resid[j]);
      }
    }
  } else {
    int cur[4];
    memset(cur, 0, sizeof(cur));
    int px[3];
    px[0] = i, px[1] = j, px[2] = k;
    memset(used, 0, sizeof(used));
    for (int i = 0; i < 3; i++) {
      int tek = px[i];
      if (a[tek].cl == 1) cur[1] += a[tek].atk;
      if (a[tek].cl == 2) cur[2] += a[tek].def;
      if (a[tek].cl == 3) cur[3] += a[tek].res;
      for (int j = 0; j < min((int)a[tek].size, (int)tt[a[tek].cl].size()); j++)
        cur[a[tek].cl] += tt[a[tek].cl][j].bonus;
    }
    int ok = 0;
    for (int i = 1; i < 4; i++)
      if (cur[i] > anss[i]) {
        ok = 1;
        break;
      } else if (cur[i] < anss[i])
        break;
    if (ok) {
      for (int i = 1; i < 4; i++) anss[i] = cur[i];
      xx[1] = i, xx[2] = j, xx[3] = k;
      for (int i = 0; i < 3; i++) {
        int tek = px[i];
        ans[i].clear();
        for (int j = 0; j < min((int)a[tek].size, (int)tt[a[tek].cl].size());
             j++) {
          ans[i].push_back(tt[a[tek].cl][j].id);
          used[ans[i].back()] = 1;
        }
      }
      for (int i = 0; i < 3; i++) {
        int tek = px[i];
        for (int j = 0; j < m && ans[i].size() < a[tek].full; j++)
          if (!used[j]) ans[i].push_back(j), used[j] = 1;
      }
    }
  }
}
int cmp(resident a, resident b) { return a.bonus > b.bonus; }
int main() {
  xx[1] = xx[2] = xx[3] = -1;
  anss[1] = anss[2] = anss[3] = -1;
  cin >> n;
  for (int i = 0; i < n; i++) a[i].read(i);
  cin >> m;
  for (int i = 0; i < m; i++) x[i].read(i);
  for (int i = 0; i < n; i++)
    if (a[i].size != a[i].full) empty = 0;
  for (int i = 0; i < m; i++) {
    tt[x[i].typ].push_back(x[i]);
  }
  for (int i = 1; i <= 3; i++) sort(tt[i].begin(), tt[i].end(), cmp);
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++) {
        int us[4];
        us[1] = us[2] = us[3] = 0;
        us[a[i].cl] = 1;
        us[a[j].cl] = 1;
        us[a[k].cl] = 1;
        if (us[1] + us[2] + us[3] == 3) {
          us[a[i].cl] = i;
          us[a[j].cl] = j;
          us[a[k].cl] = k;
          update(us[1], us[2], us[3]);
        }
      }
  for (int i = 0; i < 3; i++) {
    cout << a[xx[i + 1]].name << " " << ans[i].size();
    for (int j = 0; j < ans[i].size(); j++) cout << " " << x[ans[i][j]].name;
    cout << endl;
  }
  return 0;
}
