#include <iostream>
#include <vector>
#include <tuple>

using namespace std;

vector<int> skladiste;
// O => stoi(sladiste[0])
// A => stoi(sladiste[1])
// B => stoi(sladiste[2])
// AB => stoi(sladiste[3])

vector<string> zapisi;
bool moguce;
bool vrednostMenjana = false;

typedef tuple<string, int> PACIJENT;

bool proveriMogucnost()
{
    for (int i = 0; i < skladiste.size(); i++)
    {
        if (skladiste[i] < 0)
            return false;
    }

    return true;
}

// vector<PACIJENT> sortirajPacijente(vector<PACIJENT> arr)
// {
//     vector<PACIJENT> newArr;
//     // POSTAVI A i B GRUPU NA PRVA MESTA
//     for (int i = 0; i < arr.size(); i++)
//     {
//         const string grupa = get<0>(arr[i]);
//         if (grupa == "A" || grupa == "B")
//             newArr.push_back(arr[i]);
//     }
//     // OSTALE KASNIJE
//     for (int i = 0; i < arr.size(); i++)
//     {
//         const string grupa = get<0>(arr[i]);
//         if (grupa == "AB" || grupa == "O")
//             newArr.push_back(arr[i]);
//     }

//     return newArr;
// }

void zabeleziPacijenta(PACIJENT p)
{
    const string kgrupa = get<0>(p);
    int potrebno = get<1>(p);

    int uzetoA = 0, uzetoB = 0, uzetoAB = 0, uzetoO = 0;

    if (kgrupa == "A")
    {
        // PROVERA A REZERVOARA
        if (skladiste[1] >= potrebno)
        {
            skladiste[1] -= potrebno;
            uzetoA = potrebno;
            potrebno = 0;
        }
        else
        {
            uzetoA = skladiste[1];
            potrebno -= skladiste[1];
            skladiste[1] = 0;
        }

        // Provera O rezervoara
        if (potrebno != 0 && skladiste[0] >= potrebno)
        {
            skladiste[0] -= potrebno;
            uzetoO = potrebno;
            potrebno = 0;
        }

        else if (potrebno != 0)
        {
            uzetoO = skladiste[0];
            potrebno -= skladiste[0];
            skladiste[0] = 0;
        }
    }

    else if (kgrupa == "B")
    {
        // PROVERA B REZERVOARA
        if (skladiste[2] >= potrebno)
        {
            skladiste[2] -= potrebno;
            uzetoB = potrebno;
            potrebno = 0;
        }
        else
        {
            uzetoB = skladiste[2];
            potrebno -= skladiste[2];
            skladiste[2] = 0;
        }

        // Provera O rezervoara
        if (potrebno != 0 && skladiste[0] >= potrebno)
        {
            skladiste[0] -= potrebno;
            uzetoO = potrebno;
            potrebno = 0;
        }

        else if (potrebno != 0)
        {
            uzetoO = skladiste[0];
            potrebno -= skladiste[0];
            skladiste[0] = 0;
        }
    }

    else if (kgrupa == "O")
    {
        // Provera O rezervoara
        if (skladiste[0] >= potrebno)
        {
            skladiste[0] -= potrebno;
            uzetoO = potrebno;
            potrebno = 0;
        }

        else
        {
            uzetoO = skladiste[0];
            potrebno -= skladiste[0];
            skladiste[0] = 0;
        }
    }

    else if (kgrupa == "AB")
    {
        // PROVERA AB REZERVOARA
        if (skladiste[3] >= potrebno)
        {
            skladiste[3] -= potrebno;
            uzetoAB = potrebno;
            potrebno = 0;
        }
        else
        {
            uzetoAB = skladiste[3];
            potrebno -= skladiste[3];
            skladiste[3] = 0;
        }

        // PROVERA A REZERVOARA
        if (potrebno != 0 && skladiste[1] >= potrebno)
        {
            skladiste[1] -= potrebno;
            uzetoA = potrebno;
            potrebno = 0;
        }
        else if (potrebno != 0)
        {
            uzetoA = skladiste[1];
            potrebno -= skladiste[1];
            skladiste[1] = 0;
        }

        // PROVERA B REZERVOARA
        if (potrebno != 0 && skladiste[2] >= potrebno)
        {
            skladiste[2] -= potrebno;
            uzetoB = potrebno;
            potrebno = 0;
        }
        else if (potrebno != 0)
        {
            uzetoB = skladiste[2];
            potrebno -= skladiste[2];
            skladiste[2] = 0;
        }

        // Provera O rezervoara
        if (potrebno != 0 && skladiste[0] >= potrebno)
        {
            skladiste[0] -= potrebno;
            uzetoO = potrebno;
            potrebno = 0;
        }

        else if (potrebno != 0)
        {
            uzetoO = skladiste[0];
            potrebno -= skladiste[0];
            skladiste[0] = 0;
        }
    }

    if (vrednostMenjana && !moguce)
    {
        return;
    }

    // Ako je pacijentu i dalje potrebno, onda znaci da nije bilo dovoljno u skladistu
    if (potrebno != 0)
    {
        vrednostMenjana = true;
        moguce = false;
    }
    else
    {
        vrednostMenjana = true;
        moguce = true;
        zapisi.push_back(to_string(uzetoO) + string(" ") + to_string(uzetoA) + string(" ") + to_string(uzetoB) + string(" ") + to_string(uzetoAB));
    }
}

int main()
{
    // UNOS BROJA PACIJENATA
    int n;
    cin >> n;

    cin.ignore(256, '\n');

    // UNOS SKALDISTA
    string inputSkladista;
    getline(cin, inputSkladista);

    const string razmak = " ";

    string os = inputSkladista.substr(0, inputSkladista.find(razmak));
    string as = inputSkladista.substr(
        razmak.length() + os.length(),
        inputSkladista.find(razmak));
    string bs = inputSkladista.substr(
        2 * razmak.length() + os.length() + as.length(),
        inputSkladista.find(razmak));
    string abs = inputSkladista.substr(
        3 * razmak.length() + os.length() + as.length() + bs.length(),
        inputSkladista.find(razmak));

    skladiste.push_back(stoi(os));
    skladiste.push_back(stoi(as));
    skladiste.push_back(stoi(bs));
    skladiste.push_back(stoi(abs));

    // UNOS SVAKOG PACIJENTA ZASEBNO
    vector<PACIJENT>
        pacijenti(n);
    for (int i = 0; i < n; i++)
    {
        string pacijentInput;
        getline(cin, pacijentInput);

        string krvnaGrupa = pacijentInput.substr(0, pacijentInput.find(razmak));
        string potrebnaKolicinaString = pacijentInput.substr(
            razmak.length() + krvnaGrupa.length(),
            pacijentInput.find(razmak));

        int potrebnaKolicina = stoi(potrebnaKolicinaString);

        pacijenti[i] = make_tuple(krvnaGrupa, potrebnaKolicina);
    }

    // pacijenti = sortirajPacijente(pacijenti);

    for (int i = 0; i < pacijenti.size(); i++)
    {
        zabeleziPacijenta(pacijenti[i]);
    }

    if (!moguce)
    {
        cout << "nemoguce" << endl;
    }
    else
    {
        cout << "moguce" << endl;
        for (int i = 0; i < zapisi.size(); i++)
        {
            cout << zapisi[i] << endl;
        }
    }

    return 0;
}