#include <bits/stdc++.h>
using namespace std;
struct item {
  string name;
  int param;
  int size;
  item(const string& n, int p, int s) : name(n), param(p), size(s) {}
};
struct resident {
  string name;
  int bonus;
  string home;
  resident(const string& n, int b, const string& h)
      : name(n), bonus(b), home(h) {}
  bool operator>(const resident& that) const { return bonus > that.bonus; }
};
int main() {
  int n;
  cin >> n;
  vector<item> items[3];
  int total_size = 0;
  for (int i = 0; i < n; i++) {
    string name, type;
    int atk, def, res, size;
    cin >> name >> type >> atk >> def >> res >> size;
    if (type == "weapon") {
      items[0].push_back(item(name, atk, size));
    } else if (type == "armor") {
      items[1].push_back(item(name, def, size));
    } else {
      items[2].push_back(item(name, res, size));
    }
    total_size += size;
  }
  int k;
  cin >> k;
  if (k == total_size) {
    map<string, pair<int, vector<string> > > ms[3];
    for (int i = 0; i < 3; i++) {
      for (vector<item>::const_iterator it = items[i].begin();
           it != items[i].end(); ++it) {
        ms[i].insert(
            make_pair(it->name, make_pair(it->param, vector<string>())));
      }
    }
    for (int i = 0; i < k; i++) {
      string name, type, home;
      int bonus;
      cin >> name >> type >> bonus >> home;
      if (ms[0].count(home)) {
        if (type == "gladiator") {
          ms[0][home].first += bonus;
        }
        ms[0][home].second.push_back(name);
      } else if (ms[1].count(home)) {
        if (type == "sentry") {
          ms[1][home].first += bonus;
        }
        ms[1][home].second.push_back(name);
      } else {
        if (type == "physician") {
          ms[2][home].first += bonus;
        }
        ms[2][home].second.push_back(name);
      }
    }
    int params[3] = {0, 0, 0};
    string keys[3];
    vector<string> ans[3];
    for (int i = 0; i < 3; i++) {
      for (map<string, pair<int, vector<string> > >::const_iterator it =
               ms[i].begin();
           it != ms[i].end(); ++it) {
        if (it->second.first > params[i]) {
          params[i] = it->second.first;
          keys[i] = it->first;
          ans[i] = it->second.second;
        }
      }
    }
    for (int i = 0; i < 3; i++) {
      cout << keys[i] << ' ' << ans[i].size();
      for (vector<string>::const_iterator it = ans[i].begin();
           it != ans[i].end(); ++it) {
        cout << ' ' << *it;
      }
      cout << endl;
    }
  } else {
    vector<resident> rs[3];
    for (int i = 0; i < k; i++) {
      string name, type, home;
      int bonus;
      cin >> name >> type >> bonus >> home;
      if (type == "gladiator") {
        rs[0].push_back(resident(name, bonus, home));
      } else if (type == "sentry") {
        rs[1].push_back(resident(name, bonus, home));
      } else {
        rs[2].push_back(resident(name, bonus, home));
      }
    }
    for (int i = 0; i < 3; i++) {
      sort(rs[i].begin(), rs[i].end(), greater<resident>());
    }
    int max_params[3] = {-1, -1, -1};
    vector<item>::const_iterator ans_iter[3];
    vector<string> ans[3];
    vector<resident>::const_iterator jts[3];
    for (int i = 0; i < 3; i++) {
      for (vector<item>::const_iterator it = items[i].begin();
           it != items[i].end(); ++it) {
        vector<resident>::const_iterator jt = rs[i].begin();
        int param = it->param;
        vector<string> tmp;
        while (tmp.size() < it->size && jt != rs[i].end()) {
          param += jt->bonus;
          tmp.push_back(jt->name);
          ++jt;
        }
        if (param > max_params[i]) {
          max_params[i] = param;
          ans_iter[i] = it;
          ans[i] = tmp;
          jts[i] = jt;
        }
      }
    }
    for (int i = 0; i < 3; i++) {
      while (ans[i].size() < ans_iter[i]->size &&
             (jts[0] != rs[0].end() || jts[1] != rs[1].end() ||
              jts[2] != rs[2].end())) {
        if (jts[0] != rs[0].end()) {
          ans[i].push_back(jts[0]->name);
          ++jts[0];
        } else if (jts[1] != rs[1].end()) {
          ans[i].push_back(jts[1]->name);
          ++jts[1];
        } else if (jts[2] != rs[2].end()) {
          ans[i].push_back(jts[2]->name);
          ++jts[2];
        }
      }
      cout << ans_iter[i]->name << ' ' << ans[i].size();
      for (vector<string>::const_iterator it = ans[i].begin();
           it != ans[i].end(); ++it) {
        cout << ' ' << *it;
      }
      cout << endl;
    }
  }
  return 0;
}
