using System;
class HelloWorld {
  static void Main(string[] args) {
            int N = int.Parse(Console.ReadLine());
            string[,] pacijenti = new string[N,2];
            int[,] rasporedjeneZalihePacijenti = new int[N,4]; //rasporedjene zalihe po pacijentima
            string input = Console.ReadLine();
            string[] zalihe = input.Split(); 
            int zaliheO = int.Parse(zalihe[0]);
            int zaliheA = int.Parse(zalihe[1]);
            int zaliheB = int.Parse(zalihe[2]);
            int zaliheAB = int.Parse(zalihe[3]);
            
            for (int i = 0; i < N; i++)
            {
                input = Console.ReadLine();
                string[] pacijent = input.Split(); 
                pacijenti[i,0] = pacijent[0]; //krvna grupa
                pacijenti[i,1] = pacijent[1]; //potrebne jedinice krvi
            }
            
            for (int i = 0; i < N; i++) //nulta grupa ima najveci prioritet
            {
                if (String.Equals(pacijenti[i,0],"O"))
                {
                    if (zaliheO >= int.Parse(pacijenti[i,1]))
                    {
                        rasporedjeneZalihePacijenti[i,0] += int.Parse(pacijenti[i,1]);
                        zaliheO -= int.Parse(pacijenti[i,1]);
                    }
                    else
                    {
                        Console.WriteLine("nemoguce");
                        Environment.Exit(0); //prekid programa odmah ako je nemoguce 
                    }
                }
            }
    
            for (int i = 0; i < N; i++) //A i B grupa imaju isti prioritet
            {
                if (String.Equals(pacijenti[i,0],"A"))
                {
                    if (zaliheA >= int.Parse(pacijenti[i,1])) //da li ima A grupa
                    {
                        rasporedjeneZalihePacijenti[i,1] += int.Parse(pacijenti[i,1]);
                        zaliheA -= int.Parse(pacijenti[i,1]);
                    }
                    else
                    {
                        rasporedjeneZalihePacijenti[i,1] += zaliheA;
                        if (zaliheO >= (int.Parse(pacijenti[i,1]) - zaliheA)) //da li ima 0
                        {
                            rasporedjeneZalihePacijenti[i,0] += int.Parse(pacijenti[i,1]) - zaliheA;
                            zaliheO -= int.Parse(pacijenti[i,1]) - zaliheA;
                            zaliheA = 0;
                        }
                        else{
                            Console.WriteLine("nemoguce");
                            Environment.Exit(0); //prekid programa odmah ako je nemoguce 
                        }
                    }
                }
                if (String.Equals(pacijenti[i,0],"B"))
                {
                    if (zaliheB >= int.Parse(pacijenti[i,1])) //da li ima B grupa
                    {
                        rasporedjeneZalihePacijenti[i,2] += int.Parse(pacijenti[i,1]);
                        zaliheB -= int.Parse(pacijenti[i,1]);
                    }
                    else
                    {
                        rasporedjeneZalihePacijenti[i,2] += zaliheB;
                        if (zaliheO >= (int.Parse(pacijenti[i,1]) - zaliheB)) //da li ima 0
                        {
                            rasporedjeneZalihePacijenti[i,0] += int.Parse(pacijenti[i,1]) - zaliheB;
                            zaliheO -= int.Parse(pacijenti[i,1]) - zaliheB;
                            zaliheB = 0;
                        }
                        else{
                            Console.WriteLine("nemoguce");
                            Environment.Exit(0); //prekid programa odmah ako je nemoguce 
                        }
                    }
                }
            }
           
          for (int i = 0; i < N; i++) //AB grupa moze zadnja da se proveri, ima najmanji prioritet
            {
                if (String.Equals(pacijenti[i,0],"AB"))
                {
                    if ((zaliheAB + zaliheA + zaliheB + zaliheO) >= int.Parse(pacijenti[i,1]))
                    {
                        if (zaliheAB >= int.Parse(pacijenti[i,1])) //ima dovoljno AB kolko treba
                        {
                            rasporedjeneZalihePacijenti[i,3] += int.Parse(pacijenti[i,1]);
                            zaliheAB -= int.Parse(pacijenti[i,1]);
                        }
                        else 
                        {
                            rasporedjeneZalihePacijenti[i,3] += zaliheAB;
                            if (zaliheA >= (int.Parse(pacijenti[i,1]) - zaliheAB)) //da li ima A
                            {
                                rasporedjeneZalihePacijenti[i,1] += int.Parse(pacijenti[i,1]) - zaliheAB;
                                zaliheA -= int.Parse(pacijenti[i,1]) - zaliheAB;
                            }
                            else
                            {
                                rasporedjeneZalihePacijenti[i,1] += zaliheA;
                                if (zaliheB >= (int.Parse(pacijenti[i,1]) - zaliheAB - zaliheA)) //da li ima B
                                {
                                    rasporedjeneZalihePacijenti[i,2] += int.Parse(pacijenti[i,1]) - zaliheAB - zaliheA;
                                    zaliheA -= int.Parse(pacijenti[i,1]) - zaliheAB - zaliheA;
                                }
                                else
                                {
                                    rasporedjeneZalihePacijenti[i,1] += zaliheB;
                                    if (zaliheO >= (int.Parse(pacijenti[i,1]) - zaliheAB - zaliheA - zaliheB)) //da li ima O
                                    {
                                        rasporedjeneZalihePacijenti[i,0] += int.Parse(pacijenti[i,1]) - zaliheAB - zaliheA - zaliheB;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("nemoguce");
                        Environment.Exit(0); //prekid programa odmah ako je nemoguce 
                    }
                }
            }
           
            Console.WriteLine("moguce");
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < 4; j++)
                    Console.Write(rasporedjeneZalihePacijenti[i,j].ToString() + " ");
                
                Console.WriteLine();
            }
  }
}