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

typedef struct {
    char tip[2];
    int kolicina;
    int y[4];
    int indeks;
}Pacijent;


int cmp(const void  *p11, const void  *p22){
    Pacijent p1 = *(Pacijent *) p11;
    Pacijent p2 = *(Pacijent *) p22;

    if(strcmp(p1.tip, "AB") == 0)
        return 1;
    if(strcmp(p2.tip, "AB") == 0)
        return -1;
    return strcmp(p2.tip, p1.tip);
}

int poredi(const void  *p11, const void  *p22){
    Pacijent p1 = *(Pacijent *) p11;
    Pacijent p2 = *(Pacijent *) p22;

    return p1.indeks - p2.indeks;
}

int main(){
    int n;
    scanf("%d", &n);
    int zalihe[4];
    for(int i = 0; i < 4; i++)
        scanf("%d", &zalihe[i]);
    
    Pacijent p[10000];
    int menjanje[n];

    for(int i = 0; i < n; i++){
        scanf("%s%d", p[i].tip, &p[i].kolicina);
        p[i].indeks = i;
    }
    
    //qsort(menjanje, n, sizeof(int), cmp);
    qsort(p, n, sizeof(Pacijent), cmp);


    for(int i = 0; i < n; i++){
    if(strcmp(p[i].tip, "O") == 0)
        {
            while(zalihe[0] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[0]--, p[i].y[0]++;
            
            if(p[i].kolicina != 0)
                return printf("nemoguce"), 1;
        }

        else if(strcmp(p[i].tip, "A") == 0){
            while(zalihe[1] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[1]--, p[i].y[1]++;
            
            while(zalihe[0] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[0]--, p[i].y[0]++;

            if(p[i].kolicina != 0)
                return printf("nemoguce"), 1;
        }
        else if(strcmp(p[i].tip, "B") == 0){
            while(zalihe[2] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[2]--, p[i].y[2]++;
            
            while(zalihe[0] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[0]--, p[i].y[0]++;

            if(p[i].kolicina != 0)
                return printf("nemoguce"), 1;
        }
        else{
            while(zalihe[3] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[3]--, p[i].y[3]++;

            while(zalihe[1] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[1]--, p[i].y[1]++;
            
            while(zalihe[2] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[2]--, p[i].y[2]++;

            while(zalihe[0] > 0 && p[i].kolicina > 0)
                p[i].kolicina--, zalihe[0]--, p[i].y[0]++;
            
            if(p[i].kolicina != 0)
                return printf("nemoguce"), 1;
        }
    }


    qsort(p, n, sizeof(Pacijent), poredi);
    printf("moguce\n");
    for(int i = 0; i < n; i++)
        printf("%d %d %d %d\n", p[i].y[0], p[i].y[1], p[i].y[2], p[i].y[3]);
    return 0;
}