using System;

namespace Takmicenje_27._11._2021_
{
    struct Pacijent
    {
        public int krvna_grupa;
        public int broj_jedinica;
        public int[] dodeljene;
    }

    class Program
    {
        static void Dodela(int[] grupa, Pacijent[] pacijenti)
        {
            bool provera = true;
            //O grupa
            for (int k=0;k<pacijenti.Length;k++)
            {
                if (pacijenti[k].krvna_grupa == 0)
                {
                    if (grupa[0] < pacijenti[k].krvna_grupa) { Console.WriteLine("nemoguce"); provera = false; break; }
                    else //dodeli
                    {
                        grupa[0] -= pacijenti[k].broj_jedinica;
                        pacijenti[k].broj_jedinica = 0;
                        pacijenti[k].dodeljene[0] = pacijenti[k].broj_jedinica;
                    }
                }
                else if (pacijenti[k].krvna_grupa == 1)
                {
                    if (grupa[1] > pacijenti[k].broj_jedinica)
                    {
                        grupa[1] -= pacijenti[k].broj_jedinica;
                        pacijenti[k].dodeljene[1] = pacijenti[k].broj_jedinica;
                        pacijenti[k].broj_jedinica = 0;
                    }
                    else if (grupa[1]>0)
                    {
                        pacijenti[k].broj_jedinica -= grupa[1];
                        pacijenti[k].dodeljene[1] = grupa[1];
                        grupa[1] = 0;

                    }
                }
                else if (pacijenti[k].krvna_grupa == 2)
                {
                    if (grupa[2] > pacijenti[k].broj_jedinica)
                    {
                        grupa[2] -= pacijenti[k].broj_jedinica;
                        pacijenti[k].dodeljene[2] += pacijenti[k].broj_jedinica;
                        pacijenti[k].broj_jedinica = 0;
                    }
                    else
                    {
                        pacijenti[k].broj_jedinica -= grupa[2];
                        pacijenti[k].dodeljene[2] += grupa[2];
                        grupa[2] = 0;
                    }
                }
                else if (pacijenti[k].krvna_grupa == 3)
                {
                    if (grupa[3] > pacijenti[k].broj_jedinica)
                    {
                        grupa[3] -= pacijenti[k].broj_jedinica;
                        pacijenti[k].dodeljene[3] += pacijenti[k].broj_jedinica;
                        pacijenti[k].broj_jedinica = 0;
                    }
                    else
                    {
                        pacijenti[k].broj_jedinica -= grupa[3];
                        pacijenti[k].dodeljene[3] += grupa[3];
                        grupa[3] = 0;
                    }
                }
                //Console.WriteLine(pacijenti[k].broj_jedinica);
            }
            if (provera)
            {
                //dodela preostalih grupa
                //dodelicemo A grupu i B grupu ABu ako mu je potrebna i ako je moguce
                //AB ne treba nikom vise nista da dodeljuje
                //Ostatak treba da pokrije O grupa ako je moguce
                for (int k=0;k<pacijenti.Length;k++)
                { 
                    if (pacijenti[k].krvna_grupa==3 && pacijenti[k].broj_jedinica>0) //grupa AB kojoj jedinoj mozemo da dodelimo A i B
                    {
                        if (grupa[1]>0) //dodeli A grupu
                        {
                            if (grupa[1] > pacijenti[k].broj_jedinica)
                            {
                                grupa[1] -= pacijenti[k].broj_jedinica;
                                pacijenti[k].dodeljene[1] = pacijenti[k].broj_jedinica;
                                pacijenti[k].broj_jedinica = 0;
                            }
                            else
                            {
                                pacijenti[k].broj_jedinica -= grupa[1];
                                pacijenti[k].dodeljene[1] = grupa[1];
                                grupa[1] = 0;
                            }
                        }
                        if (grupa[2]>0) //dodeli B grupu
                        {
                            if (grupa[2] > pacijenti[k].broj_jedinica)
                            {
                                grupa[2] -= pacijenti[k].broj_jedinica;
                                pacijenti[k].dodeljene[2] += pacijenti[k].broj_jedinica;
                                pacijenti[k].broj_jedinica = 0;
                            }
                            else
                            {
                                pacijenti[k].broj_jedinica -= grupa[2];
                                pacijenti[k].dodeljene[2] += grupa[2];
                                grupa[2] = 0;
                            }
                        }
                    }
                    //Console.WriteLine(pacijenti[k].broj_jedinica);
                }
                //dodeli O
                for (int k=0;k<pacijenti.Length;k++)
                {
                    if (pacijenti[k].broj_jedinica>0)
                    {
                        if (grupa[0]>0) //dodeli
                        {
                            if (grupa[0] >= pacijenti[k].broj_jedinica)
                            {
                                grupa[0] -= pacijenti[k].broj_jedinica;
                                pacijenti[k].dodeljene[0] = pacijenti[k].broj_jedinica;
                                pacijenti[k].broj_jedinica = 0;
                            }
                            else
                            {
                                provera = false;
                                Console.Write("nemoguce");
                                break;
                            }
                        }
                        else
                        {
                            provera = false;
                            Console.Write("nemoguce");
                            break;
                        }
                    }
                }
            }
            if (provera)
            {
                Console.WriteLine("moguce");
                for (int k=0;k<pacijenti.Length;k++)
                {
                    Console.WriteLine(pacijenti[k].dodeljene[0] + " " + pacijenti[k].dodeljene[1] + " " + pacijenti[k].dodeljene[2] + " " + pacijenti[k].dodeljene[3]);
                }    
            }
        }
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string[] s = Console.ReadLine().Split();
            int[] grupa = new int[4];
            for (int i = 0; i < 4; i++) grupa[i] = Convert.ToInt32(s[i]);

            string[] s2;
            Pacijent[] pacijenti = new Pacijent[n];
            for(int i=0;i<n;i++)
            {
                s2 = Console.ReadLine().Split();
                if (s2[0] == "O") pacijenti[i].krvna_grupa = 0;
                else if (s2[0] == "A") pacijenti[i].krvna_grupa = 1;
                else if (s2[0] == "B") pacijenti[i].krvna_grupa = 2;
                else if (s2[0] == "AB") pacijenti[i].krvna_grupa = 3;
                pacijenti[i].broj_jedinica = Convert.ToInt32(s2[1]);
                pacijenti[i].dodeljene = new int[4];
            }
            
            Dodela(grupa, pacijenti);
        }
    }
}