#include <iostream>
#include <vector>
#include <map>

using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;//broj pacijenta
    int O,A,B,AB;//kapacitet bolnice
    int O1,A1,B1,AB1;//pomocne promenljive za kapacitet transfuzija bolnice
    cin>>n;
    cin>>O>>A>>B>>AB;
    O1=O;A1=A;B1=B;AB1=AB;//popunjivanje pomcnih promenljivih
    map<string,int> ukupna_potraznja;//mapa koja koristi u proveri, predstavlja ukupnu potraznju transfuzija za svaku krvnu grupu
    bool moguce=true;//bool koji predstavlja da li je moguce leciti sve pacijente ili ne
    //vrednosti potraznje transfuzija po krvnoj grupi pre provere je nula
    ukupna_potraznja["O"]=0;
    ukupna_potraznja["A"]=0;
    ukupna_potraznja["B"]=0;
    ukupna_potraznja["AB"]=0;
    vector<pair<string,int>> vektorUnosa(n);//unos u vektor pacijenata, prva promenljiva krvna grupa drugo br transfuzija
    for(int i=0;i<n;i++){
        cin>>vektorUnosa[i].first;//krv grupa
        cin>>vektorUnosa[i].second;//br transfuizija
        ukupna_potraznja[vektorUnosa[i].first]+=vektorUnosa[i].second;//popunjivanje mapa
    }
    //provera
    if(ukupna_potraznja["O"]>O)
        moguce=false;
    else
        O-=ukupna_potraznja["O"];
    if(ukupna_potraznja["A"]>O+A)
        moguce=false;
    else{
        if(ukupna_potraznja["A"]<=A)
            A-=ukupna_potraznja["A"];
        else {
            O-=ukupna_potraznja["A"]-A;
            A=0;
        }
    }
    if(ukupna_potraznja["B"]>O+B)
        moguce=false;
    else{
        if(ukupna_potraznja["B"]<=B)
            B-=ukupna_potraznja["B"];
        else {
            O-=ukupna_potraznja["B"]-B;
            B=0;
        }
    }
    if(ukupna_potraznja["AB"]>O+A+B+AB)
        moguce=false;
    else{
        if(ukupna_potraznja["AB"]<=AB)
            AB-=ukupna_potraznja["AB"];
        else if(ukupna_potraznja["AB"]<=AB+A){
            A-=ukupna_potraznja["AB"]-AB;
            AB=0;
        }
        else if(ukupna_potraznja["AB"]<=AB+A+B){
            B-=ukupna_potraznja["AB"]-AB-A;
            AB=0;
            A=0;
        }
        else{
            O-=ukupna_potraznja["AB"]-AB-A-B;
            AB=0;
            A=0;
            B=0;
        }
    }
    if(moguce){//gleda kako je prosla provera ako je moguce racuna, ako ne odma ispisuje nemoguce
        cout<<"moguce"<<'\n';
        vector<vector<int>> ispisani_v(n,vector<int>(4,0));//vektor koji se koristi u ispisu i predstavlja koliko je transfuzija uzeo svaki pacijent
        //racunanje i popunavanje resenja, ovde koristimo pomocne promenjljive
        for(int i=0;i<n;i++){
            if(vektorUnosa[i].first=="O"){
                ispisani_v[i][0]+=vektorUnosa[i].second;
                O1-=vektorUnosa[i].second;
            }
            else if(vektorUnosa[i].first=="A"){
                if(vektorUnosa[i].second<=A1){
                    ispisani_v[i][1]+=vektorUnosa[i].second;
                    A1-=vektorUnosa[i].second;
                }
                else{
                    ispisani_v[i][1]+=A1;
                    ispisani_v[i][0]+=vektorUnosa[i].second-A1;
                    O1-=vektorUnosa[i].second-A1;
                    A1=0;
                }
            }
            else if(vektorUnosa[i].first=="B"){
                if(vektorUnosa[i].second<=B1){
                    ispisani_v[i][2]+=vektorUnosa[i].second;
                    B1-=vektorUnosa[i].second;
                }
                else{
                    ispisani_v[i][2]+=B1;
                    ispisani_v[i][0]+=vektorUnosa[i].second-B1;
                    O1-=vektorUnosa[i].second-B1;
                    B1=0;
                }
            }
            else{
                if(vektorUnosa[i].second<=AB1){
                    ispisani_v[i][3]+=vektorUnosa[i].second;
                    AB1-=vektorUnosa[i].second;
                }
                else if(vektorUnosa[i].second<=AB1+A1){
                    ispisani_v[i][3]+=AB1;
                    ispisani_v[i][1]+=vektorUnosa[i].second-AB1;
                    A1-=vektorUnosa[i].second-AB1;
                    AB1=0;
                }
                else if(vektorUnosa[i].second<=AB1+A1+B1){
                    ispisani_v[i][3]+=AB1;
                    ispisani_v[i][1]+=A1;
                    ispisani_v[i][2]+=vektorUnosa[i].second-AB1-A1;
                    B1-=vektorUnosa[i].second-AB1-A1;
                    AB1=0;A1=0;
                }
                else{
                    ispisani_v[i][3]+=AB1;
                    ispisani_v[i][2]+=B1;
                    ispisani_v[i][1]+=A1;
                    ispisani_v[i][0]+=vektorUnosa[i].second-AB1-B1-A1;
                    O1-=vektorUnosa[i].second-AB1-B1-A1;
                    AB1=0;A1=0;B1=0;
                }
            }
        }
        for(int i=0;i<n;i++){//ispis resenja vektora
            for(int j=0;j<4;j++)
                cout<<ispisani_v[i][j]<<" ";

            cout<<'\n';
        }
    }
    else
        cout<<"nemoguce";


    return 0;
}