#include <bits/stdc++.h>
using namespace std;
string Name[1 << 10];
string Resident[1 << 10];
int Class[1 << 10];
int Type[1 << 10];
int A[1 << 10][4];
int Size[1 << 10];
int Home[1 << 10];
int Bonus[1 << 10];
int Sum[1 << 10][4];
int GetClass(string s) {
  if (s == "weapon") return 0;
  if (s == "armor") return 1;
  if (s == "orb") return 2;
  if (s == "gladiator") return 0;
  if (s == "sentry") return 1;
  if (s == "physician") return 2;
  return -1;
}
int main() {
  int i, j, ii, jj, kk;
  int n;
  scanf("%d", &n);
  int cnt = 0;
  for (i = (0); i < (n); ++i) {
    char buf1[32];
    char buf2[32];
    int a, b, c, d;
    scanf("%s%s%d%d%d%d", buf1, buf2, &a, &b, &c, &d);
    Name[i] = buf1;
    Class[i] = GetClass(buf2);
    A[i][0] = a;
    A[i][1] = b;
    A[i][2] = c;
    Size[i] = d;
    cnt += Size[i];
  }
  int m;
  scanf("%d", &m);
  memset(Sum, 0, sizeof(Sum));
  for (i = (0); i < (m); ++i) {
    char buf1[32];
    char buf2[32];
    char buf3[32];
    int a;
    scanf("%s%s%d%s", buf1, buf2, &a, buf3);
    Resident[i] = buf1;
    Type[i] = GetClass(buf2);
    for (j = (0); j < (n); ++j)
      if (Name[j] == buf3) break;
    Home[i] = j;
    Bonus[i] = a;
    Sum[Home[i]][Type[i]] += Bonus[i];
  }
  vector<int> ret[4];
  int pos[] = {-1, -1, -1};
  if (cnt == m) {
    for (i = (0); i < (n); ++i)
      for (j = (0); j < (3); ++j) Sum[i][j] += A[i][j];
    for (i = (0); i < (3); ++i)
      for (j = (0); j < (n); ++j)
        if (Class[j] == i && (pos[i] == -1 || Sum[j][i] > Sum[pos[i]][i]))
          pos[i] = j;
    for (i = (0); i < (3); ++i)
      for (j = (0); j < (m); ++j)
        if (Home[j] == pos[i]) ret[i].push_back(j);
  } else {
    vector<pair<int, int> > v[3];
    for (i = (0); i < (m); ++i)
      v[Type[i]].push_back(pair<int, int>(Bonus[i], i));
    for (i = (0); i < (3); ++i) {
      sort((v[i]).begin(), (v[i]).end());
      reverse((v[i]).begin(), (v[i]).end());
    }
    vector<int> res(3, -1);
    for (ii = (0); ii < (11); ++ii)
      for (jj = (0); jj < (11); ++jj)
        for (kk = (0); kk < (11); ++kk) {
          int size[] = {ii, jj, kk};
          int add[] = {0, 0, 0};
          for (i = (0); i < (3); ++i)
            for (j = (0); j < (size[i]); ++j)
              if (int((v[i]).size()) > j) add[i] += v[i][j].first;
          vector<int> r;
          int p[] = {-1, -1, -1};
          for (i = (0); i < (3); ++i) {
            int wh = -1;
            for (j = (0); j < (n); ++j)
              if (Class[j] == i && Size[j] == size[i] &&
                  (wh == -1 || A[wh][i] < A[j][i]))
                wh = j;
            if (wh != -1) {
              r.push_back(A[wh][i] + add[i]);
              p[i] = wh;
            }
          }
          if (int((r).size()) == 3 && r > res) {
            res = r;
            pos[0] = p[0];
            pos[1] = p[1];
            pos[2] = p[2];
          }
        }
    vector<int> free;
    for (i = (0); i < (3); ++i)
      for (j = (0); j < (int((v[i]).size())); ++j)
        if (Size[pos[i]] > j)
          ret[i].push_back(v[i][j].second);
        else
          free.push_back(v[i][j].second);
    for (i = (0); i < (int((free).size())); ++i) {
      for (j = (0); j < (3); ++j)
        if (int((ret[j]).size()) < Size[pos[j]]) break;
      if (j == 3) break;
      ret[j].push_back(free[i]);
    }
  }
  for (i = (0); i < (3); ++i) {
    printf("%s %d", Name[pos[i]].c_str(), int((ret[i]).size()));
    for (j = (0); j < (int((ret[i]).size())); ++j)
      printf(" %s", Resident[ret[i][j]].c_str());
    printf("\n");
  }
  return 0;
};
