using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zad2._27._11._2021
{
    class pacijenat
    {
        public int BrojJedinicaKrvi,O=0,A=0,AB=0,B=0;
        public string KrvnaGrupa;
        public pacijenat(int a,string s)
        {
            BrojJedinicaKrvi = a;
            KrvnaGrupa = s;
        }
        public void ispis()
        {
            Console.WriteLine("{0} {1} {2} {3}", O, A, B, AB);
        }
    }
    class Bolnica
    {
        public int O, A, AB, B;
        public List<pacijenat> pacijenti=new List<pacijenat>();
        public Bolnica(int o,int a,int b,int ab)
        {
            O = o;A = a;B = b;AB = ab;
        }
        public bool imaLiResursa(int PO,int PA,int PB,int PAB)
        {
            if(PO>O)
            {
                return false;
            }
            else
            {
                if(PA>A || PB>B)
                {
                    int p = 0;
                    if (PA - A > 0)
                        p += PA-A;
                    if (PB - B > 0)
                        p += PB-B;
                    if (p > O-PO)
                        return false;
                }
                else
                {
                    if (PA + PO + PB + PAB > A + O + B + AB)
                        return false;
                }
            }
            return true;
        }
        public void popuni(int PO,int PA,int PB,int PAB)
        {
            int po = PO, pa = PA, pb = PB, pab = PAB;
            if(imaLiResursa(PO,PA,PB,PAB))
            {
                Console.WriteLine("moguce");
                foreach(pacijenat p in pacijenti)
                {
                    switch(p.KrvnaGrupa)
                    {
                        case "O":
                            if (O >= p.BrojJedinicaKrvi)
                            {
                                p.O = p.BrojJedinicaKrvi;
                                O -= p.O;
                                p.BrojJedinicaKrvi -= p.O;
                            }
                            break;
                        case "A":
                            if (A >= p.BrojJedinicaKrvi)
                            {
                                p.A = p.BrojJedinicaKrvi;
                                A -= p.A;
                                p.BrojJedinicaKrvi -= p.A;
                            }
                            else
                            {
                                p.A = A;
                                p.BrojJedinicaKrvi -= A;
                                A = 0;
                            }
                            break;
                        case "B":
                            if (B >= p.BrojJedinicaKrvi)
                            {
                                p.B = p.BrojJedinicaKrvi;
                                B -= p.B;
                                p.BrojJedinicaKrvi -= p.B;
                            }
                            else
                            {
                                p.B = B;
                                p.BrojJedinicaKrvi -= B;
                                B = 0;
                            }
                            break;
                        case "AB":
                            if (AB >= p.BrojJedinicaKrvi)
                            {
                                p.AB = p.BrojJedinicaKrvi;
                                AB -= p.AB;
                                p.BrojJedinicaKrvi -= p.AB;
                            }
                            else
                            {
                                p.AB = AB;
                                p.BrojJedinicaKrvi -= AB;
                                AB = 0;
                            }
                            break;
                    }
                }
                foreach(pacijenat p in pacijenti)
                {
                    switch (p.KrvnaGrupa)
                    {
                        case "A":
                            if (O >= p.BrojJedinicaKrvi)
                            {
                                p.O = p.BrojJedinicaKrvi;
                                O -= p.O;
                                p.BrojJedinicaKrvi -= p.O;
                            }
                            break;
                        case "B":
                            if (O >= p.BrojJedinicaKrvi)
                            {
                                p.O = p.BrojJedinicaKrvi;
                                O -= p.O;
                                p.BrojJedinicaKrvi -= p.O;
                            }
                            break;
                        case "AB":
                            if (O >= p.BrojJedinicaKrvi)
                            {
                                p.O = p.BrojJedinicaKrvi;
                                O -= p.O;
                                p.BrojJedinicaKrvi -= p.O;
                            }
                            else
                            {
                                p.O = O;
                                p.BrojJedinicaKrvi -= O;
                                O = 0;
                            }
                            break;
                    }
                }
                foreach (pacijenat p in pacijenti)
                {
                    switch (p.KrvnaGrupa)
                    {
                        case "AB":
                            if (A >= p.BrojJedinicaKrvi)
                            {
                                p.A = p.BrojJedinicaKrvi;
                                A -= p.A;
                                p.BrojJedinicaKrvi -= p.A;
                            }
                            else
                            {
                                p.A = A;
                                p.BrojJedinicaKrvi -= A;
                                A = 0;
                            }
                            break;
                    }
                }
                foreach (pacijenat p in pacijenti)
                {
                    switch (p.KrvnaGrupa)
                    {
                        case "AB":
                            if (B >= p.BrojJedinicaKrvi)
                            {
                                p.B = p.BrojJedinicaKrvi;
                                B -= p.B;
                                p.BrojJedinicaKrvi -= p.B;
                            }
                            break;
                    }
                }
                foreach (pacijenat p in pacijenti)
                    p.ispis();
            }
            else
            {
                Console.WriteLine("nemoguce");
            }
        }
        public void dodaj(pacijenat p)
        {
            pacijenti.Add(p);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine()),O,A,AB,B,PO=0,PA=0,PB=0,PAB=0;
            string[] nz = Console.ReadLine().Split();
            O = int.Parse(nz[0]);
            A = int.Parse(nz[1]);
            B = int.Parse(nz[2]);
            AB = int.Parse(nz[3]);
            pacijenat p;
            Bolnica b=new Bolnica(O,A,B,AB);
            for(int i = 0; i < n; i++)
            {
                nz = Console.ReadLine().Split();
                p = new pacijenat(int.Parse(nz[1]), nz[0]);
                b.dodaj(p);
                switch (nz[0]) 
                {
                    case "O": PO += int.Parse(nz[1]);break;
                    case "A": PA += int.Parse(nz[1]); break;
                    case "B": PB += int.Parse(nz[1]); break;
                    case "AB": PAB += int.Parse(nz[1]); break;
                }
            }
            b.popuni(PO, PA, PB, PAB);
            Console.ReadLine();
        }
    }
}