using System;

class Program
{
    struct Pacijent
    {
        public string grupa;
        public int doze;
    }
    public static void Main(string[] args)
    {
        int BrojPacijenata=int.Parse(Console.ReadLine());
        string[]grupe=Console.ReadLine().Split();
        Pacijent[]pacijent= new Pacijent[BrojPacijenata];
        for(int i = 0; i < BrojPacijenata; i++)
        {
            string[]s= Console.ReadLine().Split();
            pacijent[i].grupa = s[0];
            pacijent[i].doze = int.Parse(s[1]);
        }
        int[,] dozice = new int[pacijent.Length, grupe.Length];
        dozice=MoguceDoze(ref grupe,ref pacijent);
        int O = int.Parse(grupe[0]);
        if (dozice[0,0]==-1)
        {
            Console.WriteLine("nemoguce");
        }
        else
        {
            for(int i = 0; i < dozice.GetLength(0); i++)
            {
                for(int j = 0; j < dozice.GetLength(1); j++)
                {
                    Console.Write(dozice[i,j]);
                }
                Console.WriteLine();    
            }
        }
    }
    static int[,] MoguceDoze(ref string[] grupE,ref Pacijent[] pacijent)
    {
        int O = int.Parse(grupE[0]);
        int A = int.Parse(grupE[1]);
        int B = int.Parse(grupE[2]);
        int AB = int.Parse(grupE[3]);
        int dozA = A, dozB = B, dozO = O, dozAB = AB;
        int[,] dozice = new int[pacijent.Length, grupE.Length];
        for (int i = 0; i < pacijent.Length; i++)
        {
            int doze = pacijent[i].doze;
            string grupica = pacijent[i].grupa;
            if (grupica == "A")
            {
                Raspored(dozice, doze, i, A, 1, O,0,ref dozA,ref dozO);
            }
            else if (grupica == "B")
            {
                Raspored(dozice, doze, i, B, 2, O,0,ref dozB,ref dozO);
            }
            else if (grupica == "AB")
            {
                Raspored(dozice, doze, i, AB, 3, O,0,ref dozAB,ref dozO);
                if(dozAB==0)
                    Raspored(dozice, doze, i, A, 1, B, 2, ref dozA, ref dozB);
            }
            else
            {
                if (O == doze || O > doze)
                {
                    dozice[i, 0] = doze;
                    dozO -= O;
                }
                else
                {
                    dozO = -1;
                }
                                
            }
        }
        if (dozO < 0 || dozA < 0 || dozB < 0 || dozAB < 0)
        {
            dozice[0,0]=-1;
        }
        return dozice;
    }
    static int[,] Raspored(int[,]mat,int d, int red,int slovo,int redSlova,int slovO,int d0,ref int doZ,ref int doZO)
    {
        if (slovo != 0)
        {
            if (slovo == d || slovo > d)
            {
                mat[red, redSlova] = d;
                doZ -= d;
                d -= slovo;
            }
            else
            {
                mat[red, redSlova] = slovo;
                d -= slovo;
                slovo = 0;
            }
        }
            
        if (d>0&&slovo==0)
        {           
            if (slovO >= d)
            {
                mat[red, d0] = d;
                doZO -= d;
            }            
        }
        return mat;
    }
}