#include <bits/stdc++.h>
using namespace std;
enum ItemType { WEAPON, ARMOR, ORB };
enum PersonType { GLADIATOR, SENTRY, PHYSICIAN };
struct Item {
  string name;
  ItemType type;
  vector<int> skills;
  int size;
};
struct Person {
  string name;
  PersonType type;
  int bonus;
  string home;
};
int main() {
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  int n;
  cin >> n;
  map<string, Item> items;
  vector<string> itemTypes[3];
  for (int i = (0); i < ((n)); ++i) {
    Item item;
    string type;
    cin >> item.name >> type;
    if (type == "weapon")
      item.type = WEAPON;
    else if (type == "armor")
      item.type = ARMOR;
    else
      item.type = ORB;
    item.skills.resize(3);
    for (int j = (0); j < ((3)); ++j) cin >> item.skills[j];
    cin >> item.size;
    items[item.name] = item;
    itemTypes[item.type].push_back(item.name);
  }
  int m;
  cin >> m;
  map<string, Person> persons;
  map<string, vector<int> > bonuses;
  map<string, vector<string> > itemsPersons;
  vector<string> personTypes[3];
  int fullItems = 0;
  vector<pair<int, string> > personBonuses[3];
  set<string> remaining;
  set<pair<vector<int>, string>, greater<pair<vector<int>, string> > > rem;
  for (int i = (0); i < ((m)); ++i) {
    Person p;
    string type;
    cin >> p.name >> type;
    if (type == "gladiator")
      p.type = GLADIATOR;
    else if (type == "sentry")
      p.type = SENTRY;
    else
      p.type = PHYSICIAN;
    cin >> p.bonus >> p.home;
    persons[p.name] = p;
    bonuses[p.home].resize(3);
    bonuses[p.home][p.type] += p.bonus;
    itemsPersons[p.home].push_back(p.name);
    if ((int)itemsPersons[p.home].size() == items[p.home].size) {
      ++fullItems;
    }
    remaining.insert(p.name);
    personTypes[p.type].push_back(p.name);
    personBonuses[p.type].push_back(make_pair(p.bonus, p.name));
    vector<int> skills(3);
    skills[p.type] = p.bonus;
    rem.insert(make_pair(skills, p.name));
  }
  if (fullItems == n) {
    for (int itemType = (0); itemType < ((3)); ++itemType) {
      vector<int> bestBonus(3);
      string bestItem;
      for (map<string, Item>::const_iterator it = items.begin();
           it != items.end(); ++it) {
        Item const& item = it->second;
        if (item.type != itemType) continue;
        vector<int> skills = item.skills;
        skills[itemType] += bonuses[item.name][itemType];
        if (bestBonus[itemType] < skills[itemType] ||
            bestBonus[itemType] == skills[itemType] && bestBonus < skills ||
            bestItem.empty()) {
          bestBonus = skills;
          bestItem = item.name;
        }
      }
      vector<string> const& p = itemsPersons[bestItem];
      cout << bestItem << " " << (int)p.size();
      for (int i = (0); i < (((int)p.size())); ++i) cout << " " << p[i];
      cout << endl;
    }
    return 0;
  }
  for (int i = (0); i < ((3)); ++i) {
    for (int j = (0); j < (((int)personTypes[i].size())); ++j)
      persons[personTypes[i][j]].home = "";
    sort(personBonuses[i].begin(), personBonuses[i].end());
    reverse(personBonuses[i].begin(), personBonuses[i].end());
  }
  string resultNames[3];
  vector<string> result[3];
  for (int itemType = (0); itemType < ((3)); ++itemType) {
    vector<string> const& cand = personTypes[itemType];
    string bestItem;
    vector<int> bestSkills(3);
    for (int itemIndex = (0); itemIndex < (((int)itemTypes[itemType].size()));
         ++itemIndex) {
      Item const& currentItem = items[itemTypes[itemType][itemIndex]];
      int skills = 0;
      for (int i = (0); i < ((min((int)cand.size(), currentItem.size))); ++i) {
        skills += personBonuses[itemType][i].first;
      }
      vector<int> newSkills = currentItem.skills;
      newSkills[itemType] += skills;
      if (bestSkills[itemType] < newSkills[itemType] ||
          bestSkills[itemType] == newSkills[itemType] &&
              bestSkills < newSkills ||
          bestItem.empty()) {
        bestSkills = newSkills;
        bestItem = currentItem.name;
      }
    }
    int added = 0;
    Item const& currentItem = items[bestItem];
    for (int i = (0); i < ((min((int)cand.size(), currentItem.size))); ++i) {
      string const& pname = personBonuses[itemType][i].second;
      Person const& pp = persons[pname];
      persons[pname].home = bestItem;
      vector<int> skills(3);
      skills[pp.type] = pp.bonus;
      remaining.erase(pname);
      result[itemType].push_back(pname);
      rem.erase(rem.find(make_pair(skills, pp.name)));
      ++added;
    }
    items[bestItem].size -= added;
    resultNames[itemType] = bestItem;
  }
  for (int itemType = (0); itemType < ((3)); ++itemType) {
    Item& item = items[resultNames[itemType]];
    while (!remaining.empty() && item.size) {
      string const& pname = rem.begin()->second;
      persons[pname].home = item.name;
      result[item.type].push_back(pname);
      remaining.erase(pname);
      rem.erase(rem.begin());
      --item.size;
    }
  }
  for (map<string, Item>::iterator it = items.begin(); it != items.end();
       ++it) {
    Item& item = it->second;
    while (!remaining.empty() && item.size > 0) {
      string const& pname = rem.begin()->second;
      persons[pname].home = item.name;
      rem.erase(rem.begin());
      remaining.erase(pname);
      --item.size;
    }
  }
  for (int i = (0); i < ((3)); ++i) {
    cout << resultNames[i] << " " << (int)result[i].size();
    for (int j = (0); j < (((int)result[i].size())); ++j)
      cout << " " << result[i][j];
    cout << endl;
  }
  return 0;
}
