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

namespace ConsoleApplication129
{
    class Program
    {
        static void prebaci(Dictionary<string, int>[] p, Dictionary<string, int>[] k, Dictionary<string, int> skladiste, string kljuc1, string kljuc2)
        {
            int n = p.Length;
            for (int i = 0; i < n; i++)
            {
                if(skladiste[kljuc1] < p[i][kljuc2])
                {
                    p[i][kljuc2] -= skladiste[kljuc1];
                    k[i][kljuc2] = skladiste[kljuc1];
                    skladiste[kljuc1] = 0;
                }
                else
                {
                    skladiste[kljuc1] -= p[i][kljuc2];
                    k[i][kljuc2] = p[i][kljuc2];
                    p[i][kljuc1] = 0;
                }
            }
        }
        static bool provera(Dictionary<string, int>[] p)
        {
            int n = p.Length;
            for (int i = 0; i < n; i++)
            {
                if(p[i]["A"] != 0 || p[i]["B"] != 0 || p[i]["O"] != 0 || p[i]["AB"] != 0)
                {
                    return false;
                }
            }
            return true;
        }
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var skladiste = new Dictionary<string, int>();
            string[] str = Console.ReadLine().Split();
            skladiste.Add("O", int.Parse(str[0]));
            skladiste.Add("A", int.Parse(str[1]));
            skladiste.Add("B", int.Parse(str[2]));
            skladiste.Add("AB", int.Parse(str[3]));
            Dictionary<string, int>[] p = new Dictionary<string, int>[n];
            Dictionary<string, int>[] k = new Dictionary<string, int>[n];
            for (int i = 0; i < n; i++)
            {
                p[i] = new Dictionary<string, int>();
                k[i] = new Dictionary<string, int>();
                p[i].Add("O", 0);
                p[i].Add("A", 0);
                p[i].Add("B", 0);
                p[i].Add("AB", 0);

                k[i].Add("O", 0);
                k[i].Add("A", 0);
                k[i].Add("B", 0);
                k[i].Add("AB", 0);
            }
            for (int i = 0; i < n; i++) 
            {
                str = Console.ReadLine().Split();
                p[i][str[0]] = int.Parse(str[1]);
            }
            prebaci(p, k, skladiste, "O", "O");
            prebaci(p, k, skladiste, "A", "A");
            prebaci(p, k, skladiste, "B", "B");
            prebaci(p, k, skladiste, "AB", "AB");

            prebaci(p, k, skladiste, "O", "A");
            prebaci(p, k, skladiste, "O", "B");
            prebaci(p, k, skladiste, "O", "AB");

            prebaci(p, k, skladiste, "A", "AB");
            prebaci(p, k, skladiste, "B", "AB");

            if(provera(p))
            {
                Console.WriteLine("moguce");
                string s = "";
                for (int i = 0; i < n; i++)
                {
                    s += k[i]["O"].ToString();
                    s += " ";
                    s += k[i]["A"].ToString();
                    s += " ";
                    s += k[i]["B"].ToString();
                    s += " ";
                    s += k[i]["AB"].ToString();
                    Console.WriteLine(s);
                }
            }
            else
            {
                Console.WriteLine("nemoguce");
            }
        }
    }
}