#include <bits/stdc++.h>
int N, K;
std::map<std::string, int> nconv, kconv;
std::string nlst[110], klst[1110];
int ncnt, kcnt;
inline int nget(std::string& b) {
  int rt = nconv[b];
  if (rt == 0) {
    ncnt++;
    nconv[b] = rt = ncnt;
    nlst[rt] = b;
  }
  return rt;
}
inline int kget(std::string& b) {
  int rt = kconv[b];
  if (rt == 0) {
    kcnt++;
    kconv[b] = rt = kcnt;
    klst[rt] = b;
  }
  return rt;
}
int ntype[110], nval[3][110], nsize[110], tmp[110];
std::vector<int> nlive[110];
int ktype[1110], kadd[1110], bel[1110];
std::vector<std::pair<int, int> > lst[3];
std::vector<int> ans[3];
int used[1110];
int main() {
  std::cin >> N;
  int kcount = 0;
  for (int i = 0; i < N; i++) {
    std::string sn, stype;
    std::cin >> sn >> stype;
    int no = nget(sn);
    std::cin >> nval[0][no] >> nval[1][no] >> nval[2][no] >> nsize[no];
    if (stype[0] == 'w') ntype[no] = 0;
    if (stype[0] == 'a') ntype[no] = 1;
    if (stype[0] == 'o') ntype[no] = 2;
    kcount += nsize[no];
  }
  std::cin >> K;
  for (int i = 0; i < K; i++) {
    std::string sk, stype, sbl;
    std::cin >> sk >> stype;
    int no = kget(sk), fno;
    if (stype[0] == 'g') ktype[no] = 0;
    if (stype[0] == 's') ktype[no] = 1;
    if (stype[0] == 'p') ktype[no] = 2;
    std::cin >> kadd[no] >> sbl;
    fno = bel[no] = nget(sbl);
    if (ktype[no] == ntype[fno]) tmp[fno] += kadd[no];
    nlive[fno].push_back(no);
    lst[ktype[no]].push_back(std::make_pair(kadd[no], no));
  }
  if (kcount == K) {
    int mmax[3], mpos[3];
    mmax[0] = mmax[1] = mmax[2] = -1;
    for (int i = 1; i <= ncnt; i++) {
      int nt = ntype[i];
      if (tmp[i] + nval[nt][i] > mmax[nt]) {
        mmax[nt] = tmp[i] + nval[nt][i];
        mpos[nt] = i;
      }
    }
    for (int i = 0; i < 3; i++) {
      int mp = mpos[i];
      std::cout << nlst[mp] << ' ' << nlive[mp].size();
      for (int j = nlive[mp].size() - 1; j >= 0; j--)
        std::cout << ' ' << klst[nlive[mp][j]];
      std::cout << '\n';
    }
  } else {
    for (int i = 0; i < 3; i++) std::sort(lst[i].begin(), lst[i].end());
    int mmax[3], mpos[3], mpchd[3];
    mmax[0] = mmax[1] = mmax[2] = -1;
    for (int i = 1; i <= ncnt; i++) {
      int nt = ntype[i], nv, nchd = nsize[i];
      nv = nval[nt][i];
      if (nchd > lst[nt].size()) nchd = lst[nt].size();
      int lsize = lst[nt].size();
      for (int j = 0; j < nchd; j++) nv += lst[nt][lsize - j - 1].first;
      if (nv > mmax[nt]) {
        mmax[nt] = nv;
        mpos[nt] = i;
        mpchd[nt] = nchd;
      }
    }
    for (int i = 0; i < 3; i++) {
      int lsize = lst[i].size();
      for (int j = 0; j < mpchd[i]; j++) {
        ans[i].push_back(lst[i][lsize - j - 1].second);
        used[lst[i][lsize - j - 1].second] = true;
      }
    }
    for (int i = 0; i < 3; i++) {
      for (int j = 1; j <= kcnt; j++) {
        if (ans[i].size() == nsize[mpos[i]]) break;
        if (used[j]) continue;
        used[j] = true;
        ans[i].push_back(j);
      }
    }
    for (int i = 0; i < 3; i++) {
      int mp = mpos[i];
      std::cout << nlst[mp] << ' ' << ans[i].size();
      int lsize = lst[i].size();
      for (int j = 0; j < ans[i].size(); j++)
        std::cout << ' ' << klst[ans[i][j]];
      std::cout << '\n';
    }
  }
}
