#include <stdio.h>
#include <string.h>

#define MAX 10000
#define O  0
#define A  1
#define B  2
#define AB 3

int main()
{
    int BrojKrvnihGrupa[4] = {}, n = 3, PotrebnoPacijentima[MAX];

    char KrvneGrupePacijenataRedom[MAX][2];

    scanf("%d", &n);

    scanf("%d %d %d %d", &BrojKrvnihGrupa[0], &BrojKrvnihGrupa[1], &BrojKrvnihGrupa[2], &BrojKrvnihGrupa[3]);

    for (int i = 0; i < n; ++i)
    {
        scanf("%s %d", KrvneGrupePacijenataRedom[i], &PotrebnoPacijentima[i]);
    }

    int Moguce = 1;

    for (int i = 0; i < n; ++i)
    {
        int locMoguce = 0;
        for (int j = 0; j < 4; ++j)
        {
            if (BrojKrvnihGrupa[j] == 0)
            {
                continue;
            }

            if (Pravila(KrvnaGrupaUInt(KrvneGrupePacijenataRedom[i]), j))
            {
                locMoguce = 1;
                break;
            }
        }

        if (!locMoguce)
        {
            Moguce = 0;
            break;
        }
    }

    if (!Moguce)
    {
        printf("nemoguce");
    }
    else
    {
        int Tabela[MAX][4];

        for (int Rotacija1 = 0; Rotacija1 < n; ++Rotacija1)
        {
            for (int Rotacija2 = 0; Rotacija2 < 4; ++Rotacija2)
            {
                int BKTrenutno[4];

                BKTrenutno[0] = BrojKrvnihGrupa[0];
                BKTrenutno[1] = BrojKrvnihGrupa[1];
                BKTrenutno[2] = BrojKrvnihGrupa[2];
                BKTrenutno[3] = BrojKrvnihGrupa[3];

                int PPTrenutno[MAX];

                for (int Pi = 0; Pi < n; ++Pi)
                {
                    PPTrenutno[Pi] = PotrebnoPacijentima[Pi];
                }

                for (int Ti = 0; Ti < n; ++Ti)
                {
                    for (int Tj = 0; Tj < 4; ++Tj)
                    {
                        Tabela[Ti][Tj] = 0;
                    }
                }

                for (int i = Rotacija1; i < n + Rotacija1; i++)
                {
                    int locMoguce = 0;
                    for (int j = Rotacija2; j < 4 + Rotacija2; ++j)
                    {
                        if (BKTrenutno[j % 4] == 0)
                        {
                            continue;
                        }

                        if (Pravila(KrvnaGrupaUInt(KrvneGrupePacijenataRedom[i % n]), j % 4))
                        {
                            BKTrenutno[j % 4]--;
                            PPTrenutno[i % n]--;
                            Tabela[i % n][j % 4]++;
                            locMoguce = 1;
                            if (PPTrenutno[i % n] == 0)
                            {
                                break;
                            }
                            else
                            {
                                j--;
                            }
                        }
                    }

                    if (!locMoguce)
                    {
                        Moguce = 0;
                        break;
                    }
                }

                if (Moguce)
                {
                    break;
                }
            }

            if (Moguce)
            {
                break;
            }
        }

        if (Moguce)
        {
            printf("moguce\n");
            for (int i = 0; i < n; ++i)
            {
                for (int j = 0; j < 4; ++j)
                {
                    printf("%d ", Tabela[i][j]);
                }

                printf("\n");
            }
        }
        else
        {
            printf("nemoguce");
        }
    }
}

int KrvnaGrupaUInt(char* KG)
{
    if (strcmp(KG, "O") == 0)  return O;
    if (strcmp(KG, "A") == 0)  return A;
    if (strcmp(KG, "B") == 0)  return B;
    if (strcmp(KG, "AB") == 0) return AB;
}

int Pravila(int KrvnaGrupa1, int KrvnaGrupa2)
{
    switch (KrvnaGrupa1)
    {
        case O:
            if (KrvnaGrupa2 == O)
            {
                return 1;
            } break;
        case A:
        case B:
            if (KrvnaGrupa2 == O || KrvnaGrupa1 == KrvnaGrupa2)
            {
                return 1;
            } break;
        case AB:
            return 1; break;
    }

    return 0;
}