using System;
using System.Collections.Generic;
using System.Text;

namespace TransfuzijaKrvi
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            bool nemoguce = false;
            n = int.Parse(Console.ReadLine());
            string[] grupa = new string[n];
            int[] broj = new int[n];
            string[] zalihe = Console.ReadLine().Split();
            int[,] dodato = new int[4, n];

            for (int i = 0; i < n; i++)
            {
                dodato.SetValue(0, 0, i);
                dodato.SetValue(0, 1, i);
                dodato.SetValue(0, 2, i);
                dodato.SetValue(0, 3, i);
            }

            for (int i = 0; i < n; i++) 
            {
                string[] pacijenti = Console.ReadLine().Split();
                grupa[i] = pacijenti[0];
                broj[i] = int.Parse(pacijenti[1]);
                switch (grupa[i])
                {
                    case "O":
                        for (int j = 0; j < broj[i]; j++)
                        {
                            if (zalihe[0] == "0")
                            {
                                nemoguce = true;
                                break;
                            }
                            else
                            {
                                int O = int.Parse(zalihe[0]);
                                zalihe[0] = (O - 1).ToString();
                                dodato[0, i] += 1;
                            }
                        }
                        break;
                    case "A":
                        for (int j = 0; j < broj[i]; j++)
                        {
                            if (zalihe[0] == "0" && zalihe[1] == "0")
                            {
                                nemoguce = true;
                                break;
                            }
                            else if (zalihe[1] != "0")
                            {
                                int A = int.Parse(zalihe[1]);
                                zalihe[1] = (A - 1).ToString();
                                dodato[1, i] += 1;
                            }
                            else
                            {
                                int O = int.Parse(zalihe[0]);
                                zalihe[0] = (O - 1).ToString();
                                dodato[0, i] += 1;
                            }
                        }
                        break;
                    case "B":
                        for (int j = 0; j < broj[i]; j++)
                        {
                            if (zalihe[0] == "0" && zalihe[2] == "0")
                            {
                                nemoguce = true;
                                break;
                            }
                            else if (zalihe[2] != "0")
                            {
                                int B = int.Parse(zalihe[2]);
                                zalihe[2] = (B - 1).ToString();
                                dodato[2, i] += 1;
                            }
                            else
                            {
                                int O = int.Parse(zalihe[0]);
                                zalihe[0] = (O - 1).ToString();
                                dodato[0, i] += 1;
                            }
                        }
                        break;
                    case "AB":
                        for (int j = 0; j < broj[i]; j++)
                        {
                            if (zalihe[0] == "0" && zalihe[1] == "0" && zalihe[2] == "0" && zalihe[3] == "0")
                            {
                                nemoguce = true;
                                break;
                            }
                            else if (zalihe[3] != "0")
                            {
                                int AB = int.Parse(zalihe[3]);
                                zalihe[3] = (AB - 1).ToString();
                                dodato[3, i] += 1;
                            }
                            else if (zalihe[2] != "0")
                            {
                                int B = int.Parse(zalihe[2]);
                                zalihe[2] = (B - 1).ToString();
                                dodato[2, i] += 1;
                            }
                            else if (zalihe[1] != "0")
                            {
                                int A = int.Parse(zalihe[1]);
                                zalihe[1] = (A - 1).ToString();
                                dodato[1, i] += 1;
                            }
                            else if (zalihe[0] != "0")
                            {
                                int O = int.Parse(zalihe[0]);
                                zalihe[0] = (O - 1).ToString();
                                dodato[0, i] += 1;
                            }
                        }
                        break;
                    default:
                        break;
                }
            }
            
            if (nemoguce == false)
            {
                Console.Clear();
                Console.WriteLine("moguce");
                for (int i = 0; i < n; i++)
                {
                    Console.WriteLine("{0} {1} {2} {3}", dodato[0,i], dodato[1,i], dodato[2,i], dodato[3,i]);
                }
            }
            else
            {
                Console.Clear();
                Console.WriteLine("nemoguce");
            }
        }
    }
}