using System;

namespace drugi
{
    class Program
    {
        struct Pacijent
        {
            public string grupa;
            public int jedinica;
        }
        static void IspisiMatr(int[,] m)
        {
            for (int i=0;i<m.GetLength(0);i++)
            {
                for(int j = 0;j<4;j++)
                {
                    Console.Write(m[i, j]+" ");
                }
                Console.WriteLine();
            }
        }
       
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] grupe = new int[4];
            string[] s = Console.ReadLine().Split();
            for (int i = 0; i < 4; i++)
            {
                grupe[i] = int.Parse(s[i]);
            }
            Pacijent[] pacijenti = new Pacijent[n];
            for(int i = 0; i < n; i++)
            {
                s = Console.ReadLine().Split();
                pacijenti[i].grupa = s[0];
                pacijenti[i].jedinica = int.Parse(s[1]);
            }
            int[,] matrica = new int[n,4];
            for (int i = 0; i < n; i++)
            {
                switch (pacijenti[i].grupa)
                {
                    case "O":
                        while(grupe[0] > 0 && pacijenti[i].jedinica>0)
                        {
                            pacijenti[i].jedinica--;
                            matrica[i, 0]++;
                            grupe[0]--;
                        }
                        break;
                    case "A":
                        while (grupe[1] > 0 && pacijenti[i].jedinica > 0)
                        {
                            pacijenti[i].jedinica--;
                            matrica[i, 1]++;
                            grupe[1]--;
                        }
                        break;
                    case "B":
                        while (grupe[2] > 0 && pacijenti[i].jedinica > 0)
                        {
                            pacijenti[i].jedinica--;
                            matrica[i, 2]++;
                            grupe[2]--;
                        }
                        break;
                    case "AB":
                        while (grupe[3] > 0 && pacijenti[i].jedinica > 0)
                        {
                            pacijenti[i].jedinica--;
                            matrica[i, 3]++;
                            grupe[3]--;
                        }
                        break;
                }
            }
            
            for (int i = 0; i < n; i++)
            {
                while (pacijenti[i].jedinica > 0)
                {
                    if (grupe[0] > 0)
                    {
                        grupe[0]--;
                        pacijenti[i].jedinica--;
                        matrica[i, 0]++;
                    }
                    else break;
                }
            }
                for (int i = 0; i < n; i++)
                {
                    if (pacijenti[i].grupa == "AB")
                    {
                        while (grupe[1] > 0 && pacijenti[i].jedinica > 0)
                        {

                            pacijenti[i].jedinica--;
                            matrica[i, 1]++;
                            grupe[1]--;
                        }
                        while (grupe[2] > 0 && pacijenti[i].jedinica > 0)
                        {
                            pacijenti[i].jedinica--;
                            matrica[i, 2]++;
                            grupe[2]--;
                        }
                    }
                }
            bool moguce = true;
            for (int i = 0; i < n; i++)
            {
                if (pacijenti[i].jedinica!=0)
                {
                    moguce = false;
                    break;
                }
            }
            if (moguce)
            {
                Console.WriteLine("moguce");
                IspisiMatr(matrica);
            }
            else Console.WriteLine("nemoguce");

            }
    }
}