#include <bits/stdc++.h>;

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int N;
    cin >> N;
    int zalihe[4]; //O A B AB
    cin >> zalihe[0] >> zalihe[1] >> zalihe[2] >> zalihe[3];
    int izlaz [N][4] = {0};
    pair <string, int> pacijenti[N];
    int potraznja[4] = {0}; //O A B AB
    for(int i = 0; i < N; i++)
    {
        cin >> pacijenti[N].first >> pacijenti[N].second;
        if(pacijenti[N].first == "O") potraznja[0] += pacijenti[N].second;
        else if(pacijenti[N].first == "A") potraznja[1] += pacijenti[N].second;
        else if(pacijenti[N].first == "B") potraznja[2] += pacijenti[N].second;
        else potraznja[3] += pacijenti[N].second;
    }

    //if(zalihe[0] - potraznja[0] < 0 || (zalihe[0] - potraznja[0]) - (potraznja[1] - zalihe[1]) < 0 || (zalihe[0] - potraznja[0]) - (potraznja[2] - zalihe[2]) < 0 || )

    for(int i = 0; i < N; i++)
    {
        if(pacijenti[N].first == "O")
        {
            zalihe[0] -= pacijenti[N].second;
            izlaz[i][0] = pacijenti[N].second;
        }
        else if(pacijenti[N].first == "A")
        {
            if(zalihe[1] >= pacijenti[N].second)
            {
                zalihe[1] -= pacijenti[N].second;
                izlaz[i][1] = pacijenti[N].second;
            }
            else
            {
                //Dati svu dostupnu A
                pacijenti[N].second -= zalihe[1];
                izlaz[i][1] = zalihe[1];
                zalihe[1] = 0;
                //Preostalo popuniti sa O
                zalihe[0] -= pacijenti[N].second;
                izlaz[i][0] = pacijenti[N].second;
            }
        }
        else if(pacijenti[N].first == "B")
        {
            if(zalihe[2] >= pacijenti[N].second)
            {
                zalihe[2] -= pacijenti[N].second;
                izlaz[i][2] = pacijenti[N].second;
            }
            else
            {
                //Dati svu dostupnu B
                pacijenti[N].second -= zalihe[2];
                izlaz[i][2] = zalihe[2];
                zalihe[2] = 0;
                //Preostalo popuniti sa O
                zalihe[0] -= pacijenti[N].second;
                izlaz[i][0] = pacijenti[N].second;
            }
        }
        else
        {
            if(zalihe[3] >= pacijenti[N].second)
            {
                zalihe[3] -= pacijenti[N].second;
                izlaz[i][3] = pacijenti[N].second;
            }
            else
            {
                //Dati svu dostupnu AB
                pacijenti[N].second -= zalihe[3];
                izlaz[i][3] = zalihe[3];
                zalihe[3] = 0;

                //Popuniti ostalo sa A ili B (onom koja ima najvecu razliku zaliha i potraznje)
                if(zalihe[1] - potraznja[1] >= zalihe[2] - potraznja[2])
                {
                    zalihe[1] -= min(pacijenti[N].second, max(zalihe[1] - potraznja[1], 0));
                    izlaz[i][1] = min(pacijenti[N].second, max(zalihe[1] - potraznja[1], 0));
                    pacijenti[N].second -= izlaz[i][1];

                    zalihe[2] -= min(pacijenti[N].second, max(zalihe[2] - potraznja[2], 0));
                    izlaz[i][2] = min(pacijenti[N].second, max(zalihe[2] - potraznja[2], 0));
                    pacijenti[N].second -= izlaz[i][2];
                }
                else
                {
                    zalihe[2] -= min(pacijenti[N].second, max(zalihe[2] - potraznja[2], 0));
                    izlaz[i][2] = min(pacijenti[N].second, max(zalihe[2] - potraznja[2], 0));
                    pacijenti[N].second -= izlaz[i][2];

                    zalihe[1] -= min(pacijenti[N].second, max(zalihe[1] - potraznja[1], 0));
                    izlaz[i][1] = min(pacijenti[N].second, max(zalihe[1] - potraznja[1], 0));
                    pacijenti[N].second -= izlaz[i][1];
                }


                //Preostalo popuniti sa O
                zalihe[0] -= pacijenti[N].second;
                izlaz[i][0] = pacijenti[N].second;
            }
        }
    }
    //Ispis rezultata
    if(zalihe[0] < 0)
    {
        cout << "nemoguce";
    }
    else
    {
        cout << "moguce";
        for(int i = 0; i < N; i++)
        {
            cout << izlaz[i][0] << izlaz[i][1] << izlaz[i][1] << izlaz[i][1] << '\n';
        }
    }

    return 0;
}