#include<iostream>
using namespace std;
typedef struct Node Node;
struct Node
{
char name[10];
char camp;
long long int familiar;
bool ban = false;
Node* next;
};
Node* Appcreat(int n)
{
Node* head = NULL, * tail = NULL;
int count = 0;
while (count != n)
{
Node* temp = new Node;
cin >> temp->name >> temp->camp >> temp->familiar;
temp->next = NULL;
if (!head)
head = temp;
else
tail->next = temp;
tail = temp;
count++;
}
return head;
}
void Ban1(Node*head)
{
long long int max = 0;
Node* maxfa = NULL;
while (head)
{
if (max < head->familiar&&head->ban==false&&head->camp=='H')
{
max = head->familiar;
maxfa = head;
}
head = head->next;
}
maxfa->ban = true;
}
void Ban2(Node* head)
{
long long int max = 0;
Node* maxfa = NULL;
while (head)
{
if (max < head->familiar && head->ban == false && head->camp == 'S')
{
max = head->familiar;
maxfa = head;
}
head = head->next;
}
maxfa->ban = true;
}
void Jianguan(Node* head)
{
long long int max = 0;
Node* maxfa = NULL;
while (head)
{
if (head->camp == 'H' && head->familiar > max && !head->ban)
{
max = head->familiar;
maxfa = head;
}
head = head->next;
}
cout << maxfa->name << endl;
}
void Qiusheng(Node* head)
{
long long int max = 0;
Node* maxfa = NULL;
while (head)
{
if (head->camp == 'S' && head->familiar > max && !head->ban)
{
max = head->familiar;
maxfa = head;
}
head = head->next;
}
maxfa->ban = true;
cout << maxfa->name << endl;
}
void Deletelist(Node* head)
{
while (head)
{
Node* temp = head;
head = head->next;
delete temp;
}
}
int main()
{
int n, m;
cin >> n >> m;
Node* head = Appcreat(m + n);
for (int i = 0; i < 2; i++)
Ban1(head);
for (int i = 0; i < 5; i++)
Ban2(head);
Jianguan(head);
for (int i = 0; i < 4; i++)
Qiusheng(head);
Deletelist(head);
return 0;
}