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

namespace Zadatak2
{
    class Program
    {
        struct KrvnaGrupa
        {
            public int stanjeO;
            public int stanjeA;
            public int stanjeB;
            public int stanjeAB;
            public int dostupnoO;
            public int dostupnoA;
            public int dostupnoB;
            public int dostupnoAB;
            public int potrebnoO;
            public int potrebnoA;
            public int potrebnoB;
            public int potrebnoAB;
        }
        struct Pacijent
        {
            public int potrebnoO;
            public int potrebnoA;
            public int potrebnoB;
            public int potrebnoAB;
            public int dodeljenoO;
            public int dodeljenoA;
            public int dodeljenoB;
            public int dodeljenoAB;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            KrvnaGrupa k = new KrvnaGrupa();
            Pacijent[] p = new Pacijent[n];
            string[] s = Console.ReadLine().Split();
            k.stanjeO = int.Parse(s[0]);
            k.stanjeA = int.Parse(s[1]);
            k.stanjeB = int.Parse(s[2]);
            k.stanjeAB = int.Parse(s[3]);
            int ukupnostanje = k.stanjeO + k.stanjeA + k.stanjeB + k.stanjeAB;
            int ukupno = 0;

            for (int i = 0; i < n; i++)
            {
                string[] r = Console.ReadLine().Split();
                if (r[0] == "O")
                {
                    p[i].potrebnoO = int.Parse(r[1]);
                    k.potrebnoO += int.Parse(r[1]);
                    ukupno += int.Parse(r[1]);
                }
                else if (r[0] == "A")
                {
                    p[i].potrebnoA = int.Parse(r[1]);
                    k.potrebnoA += int.Parse(r[1]);
                    ukupno += int.Parse(r[1]);
                }
                else if (r[0] == "B")
                {
                    p[i].potrebnoB = int.Parse(r[1]);
                    k.potrebnoB += int.Parse(r[1]);
                    ukupno += int.Parse(r[1]);
                }
                else if (r[0] == "AB")
                {
                    p[i].potrebnoAB = int.Parse(r[1]);
                    k.potrebnoAB += int.Parse(r[1]);
                    ukupno += int.Parse(r[1]);
                }
            }
            bool moguce = true;
            k.dostupnoO = k.stanjeO;
            k.dostupnoA = k.stanjeA + (k.dostupnoO - k.potrebnoO);
            k.dostupnoB = k.stanjeB + (k.dostupnoO - k.potrebnoO);
            k.dostupnoAB = k.stanjeAB + (k.dostupnoO - k.potrebnoO) + (k.stanjeA - k.potrebnoA) + (k.stanjeB - k.potrebnoB);
            if (ukupno > ukupnostanje || k.dostupnoO < k.potrebnoO || k.dostupnoA < k.potrebnoA || k.dostupnoB < k.potrebnoB || k.dostupnoAB < k.potrebnoAB)
            {
                Console.WriteLine("nemoguce");
            }
            else
            {
                if (moguce == true)
                {
                    //popunjavanje O
                    for (int i = 0; i < n; i++)
                    {
                        if (p[i].potrebnoO > 0)
                        {
                            if (k.stanjeO >= p[i].potrebnoO)
                            {
                                p[i].dodeljenoO = p[i].potrebnoO;
                                k.stanjeO -= p[i].potrebnoO;
                                k.dostupnoA -= p[i].potrebnoO;
                                k.dostupnoB -= p[i].potrebnoO;
                                k.dostupnoAB -= p[i].potrebnoO;
                            }
                            else
                            {
                                moguce = false;
                                break;
                            }
                        }
                    }
                }
                //popunjavanje A
                if (moguce == true)
                {
                    for (int i = 0; i < n; i++)
                    {
                        if (p[i].potrebnoA > 0)
                        {
                            if (k.stanjeA >= p[i].potrebnoA)
                            {
                                p[i].dodeljenoA = p[i].potrebnoA;
                                k.stanjeA -= p[i].potrebnoA;
                                k.dostupnoA -= p[i].potrebnoA;
                                k.dostupnoAB -= p[i].potrebnoA;
                            }
                            else
                            {
                                p[i].dodeljenoA = k.stanjeA;
                                p[i].potrebnoA -= k.stanjeA;
                                k.dostupnoA -= k.stanjeA;
                                k.dostupnoAB -= k.stanjeA;
                                k.stanjeA = 0;
                                if (k.stanjeO >= p[i].potrebnoA)
                                {
                                    p[i].dodeljenoO = p[i].potrebnoA;
                                    k.stanjeO -= p[i].potrebnoA;
                                    k.dostupnoA -= p[i].potrebnoA;
                                    k.dostupnoB -= p[i].potrebnoA;
                                    k.dostupnoAB -= p[i].potrebnoA;
                                }
                                else
                                {
                                    moguce = false;
                                    break;
                                }
                            }
                        }
                    }
                }
                //popunjavanje B
                if (moguce == true)
                {
                    for (int i = 0; i < n; i++)
                    {
                        if (p[i].potrebnoB > 0)
                        {
                            if (k.stanjeB >= p[i].potrebnoB)
                            {
                                p[i].dodeljenoB = p[i].potrebnoB;
                                k.stanjeB -= p[i].potrebnoB;
                                k.dostupnoB -= p[i].potrebnoB;
                                k.dostupnoAB -= p[i].potrebnoB;
                            }
                            else
                            {
                                p[i].dodeljenoB = k.stanjeB;
                                p[i].potrebnoB -= k.stanjeB;
                                k.dostupnoB -= k.stanjeB;
                                k.dostupnoAB -= k.stanjeB;
                                k.stanjeB = 0;
                                if (k.stanjeO >= p[i].potrebnoB)
                                {
                                    p[i].dodeljenoO = p[i].potrebnoB;
                                    k.stanjeO -= p[i].potrebnoB;
                                    k.dostupnoA -= p[i].potrebnoB;
                                    k.dostupnoB -= p[i].potrebnoB;
                                    k.dostupnoAB -= p[i].potrebnoB;
                                }
                                else
                                {
                                    moguce = false;
                                    break;
                                }
                            }
                        }
                    }
                }
                //popunjavanje AB
                if (moguce == true)
                {
                    for (int i = 0; i < n; i++)
                    {
                        if (p[i].potrebnoAB > 0)
                        {
                            if (k.stanjeAB >= p[i].potrebnoAB)
                            {
                                p[i].dodeljenoAB = p[i].potrebnoAB;
                                k.stanjeAB -= p[i].potrebnoAB;
                                k.dostupnoAB -= p[i].potrebnoAB;
                            }
                            else
                            {
                                p[i].dodeljenoAB = k.stanjeAB;
                                p[i].potrebnoAB -= k.stanjeAB;
                                k.dostupnoAB -= k.stanjeAB;
                                k.stanjeAB = 0;
                                if (k.stanjeO >= p[i].potrebnoAB)
                                {
                                    p[i].dodeljenoO = p[i].potrebnoAB;
                                    k.stanjeO -= p[i].potrebnoAB;
                                    k.dostupnoAB -= p[i].potrebnoAB;
                                }
                                else if (k.stanjeA >= p[i].potrebnoAB)
                                {
                                    p[i].dodeljenoO = k.stanjeO;
                                    p[i].potrebnoAB -= k.stanjeO;
                                    k.stanjeO = 0;
                                    p[i].dodeljenoA = p[i].potrebnoAB;
                                    k.stanjeA -= p[i].potrebnoAB;
                                    k.dostupnoAB -= p[i].potrebnoAB;
                                }
                                else if (k.stanjeB >= p[i].potrebnoAB)
                                {
                                    p[i].dodeljenoA = k.stanjeA;
                                    p[i].potrebnoAB -= k.stanjeA;
                                    k.stanjeA = 0;
                                    p[i].dodeljenoB = p[i].potrebnoAB;
                                    k.stanjeB -= p[i].potrebnoAB;
                                    k.dostupnoAB -= p[i].potrebnoAB;
                                }
                                else
                                {
                                    moguce = false;
                                    break;
                                }
                            }
                        }
                    }
                }
                if (moguce == true)
                {
                    Console.WriteLine("moguce");
                    for (int i = 0; i < n; i++)
                    {
                        Console.WriteLine(p[i].dodeljenoO + " " + p[i].dodeljenoA + " " + p[i].dodeljenoB + " " + p[i].dodeljenoAB);
                    }
                }
                else
                {
                    Console.WriteLine("nemoguce");
                }
            }
        }
    }
}