using System;

    class Program
    {
        struct Pacijent
        {
            public int grupa;
            public int br_jed;
            public int[] dodeljenih;
        }
        static void Raspodela(int[] zalihe, Pacijent[] pacijent)
        {
            for (int i = 0; i < pacijent.Length; i++)
            {
                if (pacijent[i].grupa == 0)//nulta
                {
                    if (pacijent[i].br_jed > zalihe[0]) { Console.WriteLine("nemoguce1"); return; }
                    else
                    {
                        pacijent[i].dodeljenih[0] = pacijent[i].br_jed;
                        zalihe[0] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[1] = 0;
                        pacijent[i].dodeljenih[2] = 0;
                        pacijent[i].dodeljenih[3] = 0;
                    }
                }
                else if (pacijent[i].grupa == 1)//A
                {
                    if (pacijent[i].br_jed > zalihe[1] + zalihe[0]) { Console.WriteLine("nemoguce"); return; }
                    else if (pacijent[i].br_jed <= zalihe[1])//ima dovoljno
                    {
                        pacijent[i].dodeljenih[1] = pacijent[i].br_jed;
                        zalihe[1] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[0] = 0;
                        pacijent[i].dodeljenih[2] = 0;
                        pacijent[i].dodeljenih[3] = 0;
                    }
                    else //nedostatak u A
                    {
                        pacijent[i].dodeljenih[1] = zalihe[1];
                        pacijent[i].br_jed -= zalihe[1];
                        zalihe[1] = 0;

                        pacijent[i].dodeljenih[0] = pacijent[i].br_jed;
                        zalihe[0] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[2] = 0;
                        pacijent[i].dodeljenih[3] = 0;
                    }
                }
                else if (pacijent[i].grupa == 2)//B
                {
                    if (pacijent[i].br_jed > zalihe[2] + zalihe[0]) { Console.WriteLine("nemoguce"); return; }
                    else if (pacijent[i].br_jed <= zalihe[2])//ima dovoljno u B
                    {
                        pacijent[i].dodeljenih[2] = pacijent[i].br_jed;
                        zalihe[2] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[0] = 0;
                        pacijent[i].dodeljenih[1] = 0;
                        pacijent[i].dodeljenih[3] = 0;
                    }
                    else //nedostatak u B
                    {
                        pacijent[i].dodeljenih[2] = zalihe[2];
                        pacijent[i].br_jed -= zalihe[2];
                        zalihe[2] = 0;

                        pacijent[i].dodeljenih[0] = pacijent[i].br_jed;
                        zalihe[0] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[1] = 0;
                        pacijent[i].dodeljenih[3] = 0;
                    }
                }
                else if (pacijent[i].grupa == 3)//AB
                {
                    if (pacijent[i].br_jed > zalihe[2] + zalihe[0] + zalihe[3] + zalihe[1]) { Console.WriteLine("nemoguce"); return; }
                    else if (pacijent[i].br_jed < zalihe[3])//ima dovoljno AB
                    {
                        pacijent[i].dodeljenih[3] = pacijent[i].br_jed;
                        zalihe[3] -= pacijent[i].br_jed;
                        pacijent[i].dodeljenih[0] = 0;
                        pacijent[i].dodeljenih[1] = 0;
                        pacijent[i].dodeljenih[2] = 0;
                    }
                    else //ima dovoljno s drugim
                    {
                        pacijent[i].dodeljenih[3] = zalihe[3];
                        pacijent[i].br_jed -= zalihe[3];
                        zalihe[3] = 0;

                        if (pacijent[i].br_jed <= zalihe[0])//ima dovoljno u O
                        {
                            pacijent[i].dodeljenih[0] = pacijent[i].br_jed;
                            zalihe[0] -= pacijent[i].br_jed;
                            pacijent[i].dodeljenih[1] = 0;
                            pacijent[i].dodeljenih[2] = 0;

                        }
                        else if (pacijent[i].br_jed <= zalihe[0] + zalihe[1])// O i A
                        {
                            pacijent[i].dodeljenih[0] = zalihe[0];
                            pacijent[i].br_jed -= zalihe[0];
                            zalihe[0] = 0;
                            pacijent[i].dodeljenih[1] = pacijent[i].br_jed;
                            zalihe[1] -= pacijent[i].br_jed;
                        }
                        else//sva tri
                        {
                            pacijent[i].dodeljenih[0] = zalihe[0];
                            pacijent[i].br_jed -= zalihe[0];
                            zalihe[0] = 0;

                            pacijent[i].dodeljenih[0] = zalihe[1];
                            pacijent[i].br_jed -= zalihe[1];
                            zalihe[1] = 0;

                            pacijent[i].dodeljenih[2] = pacijent[i].br_jed;
                            zalihe[2] -= pacijent[i].br_jed;
                        }
                    }
                }
            }
          Console.WriteLine("moguce");
          for(int i=0;i<pacijent.Length;i++)
          {
            Console.WriteLine($"{pacijent[i].dodeljenih[0]} {pacijent[i].dodeljenih[1]} {pacijent[i].dodeljenih[2]} {pacijent[i].dodeljenih[3]}");
          }
        }
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            int[] zalihe = new int[4];
            string[] z = Console.ReadLine().Split();
            for (int i = 0; i < z.Length; i++) zalihe[i] = Convert.ToInt32(z[i]);

            Pacijent[] pacijent = new Pacijent[n];
            for (int i = 0; i < n; i++)
            {
                z = Console.ReadLine().Split();
                if (z[0] == "O")
                {
                    pacijent[i].grupa = 0;
                    pacijent[i].br_jed = Convert.ToInt32(z[1]);
                    pacijent[i].dodeljenih = new int[4];
                }
                else if (z[0] == "A")
                {
                    pacijent[i].grupa = 1;
                    pacijent[i].br_jed = Convert.ToInt32(z[1]);
                    pacijent[i].dodeljenih = new int[4];
                }
                else if (z[0] == "B")
                {
                    pacijent[i].grupa = 2;
                    pacijent[i].br_jed = Convert.ToInt32(z[1]);
                    pacijent[i].dodeljenih = new int[4];
                }
                else if (z[0] == "AB")
                {
                    pacijent[i].grupa = 3;
                    pacijent[i].br_jed = Convert.ToInt32(z[1]);
                    pacijent[i].dodeljenih = new int[4];
                }

            }
            Raspodela(zalihe, pacijent);
        }
    }