#include <iostream>

using namespace std; 

int main()
{
    int n, o, a, b, ab;

    //KOMPLETAN INPUT

    cin >> n;
    cin >> o >> a >> b >> ab;
    
    string* s = new string[n];
    int* niz = new int[n];

    for (int i = 0; i < n; i++)
    {
        cin >> s[i] >> niz[i];
    }

    //SABIRANJE NEOPHODNIH

    int sumaO = 0, sumaA = 0, sumaB = 0, sumaAB = 0;

    for (int i = 0; i < n; i++)
    {
        if (s[i] == "O")
        {
            sumaO += niz[i];
        }
        else if (s[i] == "A")
        {
            sumaA += niz[i];
        }
        else if (s[i] == "B")
        {
            sumaB += niz[i];
        }
        else
        {
            sumaAB += niz[i];
        }
    }

    //PROVERA

    if (sumaO > o)
    {
        cout << "nemoguce";
        return 0;
    }
    else
    {
        if (sumaA > o + a - sumaO)
        {
            cout << "nemoguce";
            return 0;
        }
        else
        {
            if (sumaB > b)
            {
                if (sumaO == o || (sumaO < o && sumaA > a && a + o - sumaO == sumaA) || (sumaO < o && sumaA > a && o + a + b - sumaO - sumaA < sumaB))
                {
                    cout << "netacno";
                    return 0;
                }
            }
            else
            {
                if (sumaAB > o + a + b + ab - sumaO - sumaA - sumaB)
                {
                    cout << "nemoguce";
                    return 0;
                }
            }
        }
    }
    cout << "moguce" << endl;
    
    //POPUNJAVANJE MATRICE

    int** izlaz = new int*[n];
    for (int i = 0; i < n; i++)
    {
        izlaz[i] = new int[4];
        for (int j = 0; j < 4; j++)
        {
            izlaz[i][j] = 0;
        }
    }

    for (int i = 0; i < n; i++)
    {
        if (s[i] == "O") //ima dovoljno nulte
        {
            izlaz[i][0] = niz[i];
            o-=niz[i];
            sumaO -= niz[i];
        }
        if (s[i] == "A")
        {
            sumaA -= niz[i];
            if (a >= niz[i]) //ima dovoljno A grupa
            {
                izlaz[i][1] = niz[i];
                a -= niz[i];
            }
            else //nema dovoljno A, dopunjava se nultom
            {
                izlaz[i][0] = niz[i] - a;
                izlaz[i][1] = a;
                o -= niz[i] - a;
                a = 0;
            }
        }
        if (s[i] == "B")
        {
            sumaB -= niz[i];
            if (b >= niz[i]) // ima dovoljno B grupa
            {
                izlaz[i][2] = niz[i];
                b -= niz[i];
            }
            else // nema dovoljno B, dopunjava se nultom
            {
                izlaz[i][0] = niz[i] - b;
                izlaz[i][2] = b;
                o -= niz[i] - b;
                b = 0;
            }
        }
        if (s[i] == "AB")
        {
            if (ab >= niz[i]) // ima dovoljno AB grupa
            {
                izlaz[i][3] = niz[i];
                ab -= niz[i];
            }
            else if (b == 0 && a>0) // nema dovoljno AB, dopunjava se sa A
            {
                izlaz[i][1] = niz[i] - ab;
                izlaz[i][3] = ab;
                a -= niz[i] - ab;
                ab = 0;
            }
            else if (a == 0 && b>0) // nema dovoljno AB, dopunjava se sa B
            {
                izlaz[i][2] = niz[i] - ab;
                izlaz[i][3] = ab;
                b -= niz[i] - ab;
                ab = 0;
            }
            else if (a == 0 && b == 0 && o>0) // nema dovoljno AB, dopunjava se sa nultom
            {
                izlaz[i][0] = niz[i] - ab;
                izlaz[i][3] = ab;
                o -= niz[i] - ab;
                ab = 0;
            }
            else // proizvoljni slucajevi
            {
                int uzetiA = a - sumaA, uzetiB = b - sumaB, uzetiO = o - sumaO;
                if (uzetiA >= niz[i] - ab) // dopunjavamo sa A jer ga ima vise nego sto ce nam kasnije biti neophodno
                {
                    izlaz[i][1] = niz[i] - ab;
                    a -= niz[i] - ab;
                }
                else if (uzetiA < niz[i] - ab && uzetiB>=niz[i] - ab - uzetiA) // dopunjavamo sa A i B jer nema dovoljno A za kasnije
                {
                    izlaz[i][1] = uzetiA;
                    izlaz[i][2] = niz[i] - ab - uzetiA;
                    a -= uzetiA;
                    b -= niz[i] - ab - uzetiA;
                }
                else if (uzetiA < niz[i] - ab && uzetiB < niz[i] - ab - uzetiA && uzetiO >= niz[i] - ab - uzetiA - uzetiB) // dopunjavamo sa A, B i nultom jer ni A ni B nema dovoljno za kasnije
                {
                    izlaz[i][1] = uzetiA;
                    izlaz[i][2] = uzetiB;
                    izlaz[i][0] = niz[i] - ab - uzetiA - uzetiB;
                    a -= uzetiA;
                    b -= uzetiB;
                    o -= niz[i] - ab - uzetiA - uzetiB;
                }
                izlaz[i][3] = ab;
                ab = 0;
            }
        }
    }

    //ISPIS

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            cout << izlaz[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}