using System;

namespace Takmicenje_3._godina_2._zadatak
{
    class Program
    {
        struct pacijent
        {
            public int indexgrupe;
            public int potreban_broj_krvi;
            public int[] primljene;
        }
        static void Main(string[] args)
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string[] red = Console.ReadLine().Split();
            int[] krv = new int[4];
            for (int i = 0; i < 4; i++)
            {
                krv[i] = Convert.ToInt32(red[i]);
            }
            pacijent[] niz = new pacijent[n];
            for(int i = 0; i < n; i++)
            {
                red = Console.ReadLine().Split();
                switch (red[0])
                {
                    case "O":
                        niz[i].indexgrupe = 0;
                        break;
                    case "A":
                        niz[i].indexgrupe = 1;
                        break;
                    case "B":
                        niz[i].indexgrupe = 2;
                        break;
                    case "AB":
                        niz[i].indexgrupe = 3;
                        break;
                }
                niz[i].potreban_broj_krvi = Convert.ToInt32(red[1]);
                niz[i].primljene = new int[4];
            }
            for(int i = 0; i < n; i++)
            {
                int potrebno = niz[i].potreban_broj_krvi;
                niz[i].potreban_broj_krvi = Math.Max(0, niz[i].potreban_broj_krvi - krv[niz[i].indexgrupe]);
                niz[i].primljene[niz[i].indexgrupe] += Math.Min(potrebno, krv[niz[i].indexgrupe]);
                krv[niz[i].indexgrupe] -= Math.Min(potrebno, krv[niz[i].indexgrupe]);
            }
            for (int i = 0; i < n; i++)
            {
                if(niz[i].indexgrupe == 1 || niz[i].indexgrupe == 2)
                {
                    int potrebno = niz[i].potreban_broj_krvi;
                    niz[i].potreban_broj_krvi = Math.Max(0, niz[i].potreban_broj_krvi - krv[0]);
                    niz[i].primljene[0] += Math.Min(potrebno, krv[0]);
                    krv[0] -= Math.Min(potrebno, krv[0]);
                }
            }
            for (int i = 0; i < n; i++)
            {
                if (niz[i].indexgrupe == 3)
                {
                    int potrebno = niz[i].potreban_broj_krvi;
                    niz[i].potreban_broj_krvi = Math.Max(0, niz[i].potreban_broj_krvi - krv[0]);
                    niz[i].primljene[0] += Math.Min(potrebno, krv[0]);
                    krv[0] -= Math.Min(potrebno, krv[0]);
                    

                    potrebno = niz[i].potreban_broj_krvi;
                    niz[i].potreban_broj_krvi = Math.Max(0, niz[i].potreban_broj_krvi - krv[1]);
                    niz[i].primljene[1] += Math.Min(potrebno, krv[1]);
                    krv[1] -= Math.Min(potrebno, krv[1]);
                    

                    potrebno = niz[i].potreban_broj_krvi;
                    niz[i].potreban_broj_krvi = Math.Max(0, niz[i].potreban_broj_krvi - krv[2]);
                    niz[i].primljene[2] += Math.Min(potrebno, krv[2]);
                    krv[2] -= Math.Min(potrebno, krv[2]);
                    
                }
            }
            for (int i = 0; i < n; i++)
            {
                if(niz[i].potreban_broj_krvi > 0)
                {
                    Console.WriteLine("nemoguce");
                    return;
                }
            }
            Console.WriteLine("moguce");
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < 4; j++)
                {
                    Console.Write(niz[i].primljene[j] + " ");
                }
                Console.WriteLine();
            }

        }
    }
}