#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Card {
int rank;
char suit;
Card(int rank, char suit) {
this->rank = rank;
this->suit = suit;
}
bool operator==(const Card &other) const {
return suit == other.suit && rank == other.rank;
}
string to_string() const {
return ::to_string(rank) + string(1, suit);
}
};
int main() {
const int HAND = 3;
const int TABLE = 4;
vector<Card> hand;
vector<Card> table;
for (int i = 0; i < HAND; i++) {
int rank;
char suit;
scanf("%d%c", &rank, &suit);
hand.emplace_back(rank, suit);
}
for (int i = 0; i < TABLE; i++) {
int rank;
char suit;
scanf("%d%c", &rank, &suit);
table.emplace_back(rank, suit);
}
bool comb_mat[16][TABLE] = {
{false, false, false, false},
{false, false, false, true},
{false, false, true, false},
{false, false, true, true},
{false, true, false, false},
{false, true, false, true},
{false, true, true, false},
{false, true, true, true},
{true, false, false, false},
{true, false, false, true},
{true, false, true, false},
{true, false, true, true},
{true, true, false, false},
{true, true, false, true},
{true, true, true, false},
{true, true, true, true}
};
vector<Card> best;
Card settebello = Card(7, 'G');
int found_7s_out = 0;
bool settebello_out = false;
bool scopa_out = false;
for (int i = 0; i < HAND; i++) {
for (int j = 0; j < 16; j++) {
vector<Card> curr;
int found_7s_in = 0;
bool settebello_in = false;
bool scopa_in = false;
if (hand[i] == settebello) {
settebello_in = true;
}
if (j == 16 - 1) {
scopa_in = true;
}
int rank_sum = 0;
for (int k = 0; k < TABLE; k++) {
Card card = table[k];
if (comb_mat[j][k]) {
curr.push_back(card);
rank_sum += card.rank;
if (card == settebello) {
settebello_in = true;
}
if (card.rank == 7) {
found_7s_in++;
}
}
}
if (rank_sum == hand[i].rank) {
if (!(settebello_out && !settebello_in)) {
settebello_out = settebello_in;
if (!(scopa_out && !scopa_in)) {
scopa_out = scopa_in;
if (found_7s_in > found_7s_out || (found_7s_in == found_7s_out && curr.size() > best.size())) {
found_7s_out = found_7s_in;
curr.push_back(hand[i]);
best = curr;
}
}
}
}
}
}
for (const Card &card: best) {
cout << card.to_string() << ' ';
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBDYXJkIHsKICAgIGludCByYW5rOwogICAgY2hhciBzdWl0OwoKICAgIENhcmQoaW50IHJhbmssIGNoYXIgc3VpdCkgewogICAgICAgIHRoaXMtPnJhbmsgPSByYW5rOwogICAgICAgIHRoaXMtPnN1aXQgPSBzdWl0OwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYXJkICZvdGhlcikgY29uc3QgewogICAgICAgIHJldHVybiBzdWl0ID09IG90aGVyLnN1aXQgJiYgcmFuayA9PSBvdGhlci5yYW5rOwogICAgfQoKICAgIHN0cmluZyB0b19zdHJpbmcoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIDo6dG9fc3RyaW5nKHJhbmspICsgc3RyaW5nKDEsIHN1aXQpOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBjb25zdCBpbnQgSEFORCA9IDM7CiAgICBjb25zdCBpbnQgVEFCTEUgPSA0OwoKICAgIHZlY3RvcjxDYXJkPiBoYW5kOwogICAgdmVjdG9yPENhcmQ+IHRhYmxlOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSEFORDsgaSsrKSB7CiAgICAgICAgaW50IHJhbms7CiAgICAgICAgY2hhciBzdWl0OwogICAgICAgIHNjYW5mKCIlZCVjIiwgJnJhbmssICZzdWl0KTsKICAgICAgICBoYW5kLmVtcGxhY2VfYmFjayhyYW5rLCBzdWl0KTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFRBQkxFOyBpKyspIHsKICAgICAgICBpbnQgcmFuazsKICAgICAgICBjaGFyIHN1aXQ7CiAgICAgICAgc2NhbmYoIiVkJWMiLCAmcmFuaywgJnN1aXQpOwogICAgICAgIHRhYmxlLmVtcGxhY2VfYmFjayhyYW5rLCBzdWl0KTsKICAgIH0KCiAgICBib29sIGNvbWJfbWF0WzE2XVtUQUJMRV0gPSB7CiAgICAgICAgICAgIHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX0sCiAgICAgICAgICAgIHtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlfSwKICAgICAgICAgICAge2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgIGZhbHNlfSwKICAgICAgICAgICAge2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgIHRydWV9LAogICAgICAgICAgICB7ZmFsc2UsIHRydWUsICBmYWxzZSwgZmFsc2V9LAogICAgICAgICAgICB7ZmFsc2UsIHRydWUsICBmYWxzZSwgdHJ1ZX0sCiAgICAgICAgICAgIHtmYWxzZSwgdHJ1ZSwgIHRydWUsICBmYWxzZX0sCiAgICAgICAgICAgIHtmYWxzZSwgdHJ1ZSwgIHRydWUsICB0cnVlfSwKCiAgICAgICAgICAgIHt0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZX0sCiAgICAgICAgICAgIHt0cnVlLCAgZmFsc2UsIGZhbHNlLCB0cnVlfSwKICAgICAgICAgICAge3RydWUsICBmYWxzZSwgdHJ1ZSwgIGZhbHNlfSwKICAgICAgICAgICAge3RydWUsICBmYWxzZSwgdHJ1ZSwgIHRydWV9LAogICAgICAgICAgICB7dHJ1ZSwgIHRydWUsICBmYWxzZSwgZmFsc2V9LAogICAgICAgICAgICB7dHJ1ZSwgIHRydWUsICBmYWxzZSwgdHJ1ZX0sCiAgICAgICAgICAgIHt0cnVlLCAgdHJ1ZSwgIHRydWUsICBmYWxzZX0sCiAgICAgICAgICAgIHt0cnVlLCAgdHJ1ZSwgIHRydWUsICB0cnVlfQogICAgfTsKCiAgICB2ZWN0b3I8Q2FyZD4gYmVzdDsKICAgIENhcmQgc2V0dGViZWxsbyA9IENhcmQoNywgJ0cnKTsKCiAgICBpbnQgZm91bmRfN3Nfb3V0ID0gMDsKICAgIGJvb2wgc2V0dGViZWxsb19vdXQgPSBmYWxzZTsKICAgIGJvb2wgc2NvcGFfb3V0ID0gZmFsc2U7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIQU5EOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDE2OyBqKyspIHsKICAgICAgICAgICAgdmVjdG9yPENhcmQ+IGN1cnI7CgogICAgICAgICAgICBpbnQgZm91bmRfN3NfaW4gPSAwOwogICAgICAgICAgICBib29sIHNldHRlYmVsbG9faW4gPSBmYWxzZTsKICAgICAgICAgICAgYm9vbCBzY29wYV9pbiA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKGhhbmRbaV0gPT0gc2V0dGViZWxsbykgewogICAgICAgICAgICAgICAgc2V0dGViZWxsb19pbiA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChqID09IDE2IC0gMSkgewogICAgICAgICAgICAgICAgc2NvcGFfaW4gPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgcmFua19zdW0gPSAwOwoKICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBUQUJMRTsgaysrKSB7CiAgICAgICAgICAgICAgICBDYXJkIGNhcmQgPSB0YWJsZVtrXTsKICAgICAgICAgICAgICAgIGlmIChjb21iX21hdFtqXVtrXSkgewogICAgICAgICAgICAgICAgICAgIGN1cnIucHVzaF9iYWNrKGNhcmQpOwogICAgICAgICAgICAgICAgICAgIHJhbmtfc3VtICs9IGNhcmQucmFuazsKICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZCA9PSBzZXR0ZWJlbGxvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlYmVsbG9faW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZC5yYW5rID09IDcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfN3NfaW4rKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChyYW5rX3N1bSA9PSBoYW5kW2ldLnJhbmspIHsKICAgICAgICAgICAgICAgIGlmICghKHNldHRlYmVsbG9fb3V0ICYmICFzZXR0ZWJlbGxvX2luKSkgewogICAgICAgICAgICAgICAgICAgIHNldHRlYmVsbG9fb3V0ID0gc2V0dGViZWxsb19pbjsKICAgICAgICAgICAgICAgICAgICBpZiAoIShzY29wYV9vdXQgJiYgIXNjb3BhX2luKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY29wYV9vdXQgPSBzY29wYV9pbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kXzdzX2luID4gZm91bmRfN3Nfb3V0IHx8IChmb3VuZF83c19pbiA9PSBmb3VuZF83c19vdXQgJiYgY3Vyci5zaXplKCkgPiBiZXN0LnNpemUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kXzdzX291dCA9IGZvdW5kXzdzX2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5wdXNoX2JhY2soaGFuZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gY3VycjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGNvbnN0IENhcmQgJmNhcmQ6IGJlc3QpIHsKICAgICAgICBjb3V0IDw8IGNhcmQudG9fc3RyaW5nKCkgPDwgJyAnOwogICAgfQoKICAgIHJldHVybiAwOwp9