#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
bool grupaO(vector<pair<string,int>>& pacijenti,unordered_map<string,int>& zalihe,
            vector<vector<int>>& jedinice){
    for(int i=0;i<pacijenti.size();i++)
        if(pacijenti[i].first=="O"){
            if(pacijenti[i].second>zalihe.at("O"))
                return false;
            jedinice[i][0]=pacijenti[i].second;
            zalihe.at("O")-=pacijenti[i].second;
        }
    return true;
}
bool grupaA(vector<pair<string,int>>& pacijenti,unordered_map<string,int>& zalihe,
            vector<vector<int>>& jedinice){
    for(int i=0;i<pacijenti.size();i++)
        if(pacijenti[i].first=="A"){
            if(pacijenti[i].second>zalihe.at("A") &&
               pacijenti[i].second-zalihe.at("A")>zalihe.at("O"))
                return false;
            if(pacijenti[i].second>zalihe.at("A")){
                jedinice[i][0]=pacijenti[i].second-zalihe.at("A");
                jedinice[i][1]=zalihe.at("A");
                zalihe.at("A")=0;
                zalihe.at("O")-=pacijenti[i].second-zalihe.at("A");
            }
            else{
                jedinice[i][1]=pacijenti[i].second;
                zalihe.at("A")-=pacijenti[i].second;
            }
        }
    return true;
}
bool grupaB(vector<pair<string,int>>& pacijenti,unordered_map<string,int>& zalihe,
            vector<vector<int>>& jedinice){
    for(int i=0;i<pacijenti.size();i++)
        if(pacijenti[i].first=="B"){
            if(pacijenti[i].second>zalihe.at("B") &&
               pacijenti[i].second-zalihe.at("B")>zalihe.at("O"))
                return false;
            if(pacijenti[i].second>zalihe.at("B")){
                jedinice[i][0]=pacijenti[i].second-zalihe.at("B");
                jedinice[i][2]=zalihe.at("B");
                zalihe.at("B")=0;
                zalihe.at("O")-=pacijenti[i].second-zalihe.at("B");
            }
            else{
                jedinice[i][2]=pacijenti[i].second;
                zalihe.at("B")-=pacijenti[i].second;
            }
        }
    return true;
}
bool grupaAB(vector<pair<string,int>>& pacijenti,unordered_map<string,int>& zalihe,
            vector<vector<int>>& jedinice){
    for(int i=0;i<pacijenti.size();i++)
        if(pacijenti[i].first=="AB"){
            int preostalo=zalihe.at("O")+zalihe.at("A")+zalihe.at("B")+zalihe.at("AB");
            if(pacijenti[i].second>preostalo)
                return false;
            if(zalihe.at("O") && pacijenti[i].second){
                if(pacijenti[i].second>=zalihe.at("O")){
                    jedinice[i][0]=zalihe.at("O");
                    pacijenti[i].second-=zalihe.at("O");
                    zalihe.at("O")=0;
                }
                else{
                    jedinice[i][0]=zalihe.at("O")-pacijenti[i].second;
                    pacijenti[i].second=0;
                    zalihe.at("O")-=pacijenti[i].second;
                }
            }
            if(zalihe.at("A") && pacijenti[i].second){
                if(pacijenti[i].second>=zalihe.at("A")){
                    jedinice[i][1]=zalihe.at("A");
                    pacijenti[i].second-=zalihe.at("A");
                    zalihe.at("A")=0;
                }
                else{
                    jedinice[i][1]=zalihe.at("A")-pacijenti[i].second;
                    pacijenti[i].second=0;
                    zalihe.at("A")-=pacijenti[i].second;
                }
            }
            if(zalihe.at("B") && pacijenti[i].second){
                if(pacijenti[i].second>=zalihe.at("B")){
                    jedinice[i][2]=zalihe.at("B");
                    pacijenti[i].second-=zalihe.at("B");
                    zalihe.at("B")=0;
                }
                else{
                    jedinice[i][2]=zalihe.at("B")-pacijenti[i].second;
                    pacijenti[i].second=0;
                    zalihe.at("B")-=pacijenti[i].second;
                }
            }
            if(zalihe.at("AB") && pacijenti[i].second){
                if(pacijenti[i].second>=zalihe.at("AB")){
                    jedinice[i][3]=zalihe.at("AB");
                    pacijenti[i].second-=zalihe.at("AB");
                    zalihe.at("AB")=0;
                }
                else{
                    jedinice[i][3]=zalihe.at("AB")-pacijenti[i].second;
                    pacijenti[i].second=0;
                    zalihe.at("AB")-=pacijenti[i].second;
                }
            }
        }
    return true;
}
int main(){
    ios_base::sync_with_stdio(false);
	int N;
	cin>>N;
    int O,A,B,AB;
    cin>>O>>A>>B>>AB;
    vector<pair<string,int>> pacijenti(N);
    unordered_map<string,int> zalihe={
        {"AB",AB},
        {"B",B},
        {"A",A},
        {"O",O},
    };
    for(int i=0;i<N;i++)
        cin>>pacijenti[i].first>>pacijenti[i].second;
    vector<vector<int>> jedinice(N,vector<int>(4,0));
    if(grupaO(pacijenti,zalihe,jedinice) && grupaA(pacijenti,zalihe,jedinice) &&
       grupaB(pacijenti,zalihe,jedinice) && grupaAB(pacijenti,zalihe,jedinice)){
        cout<<"moguce"<<endl;
        for(int i=0;i<N;i++){
            for(int j=0;j<4;j++)
                cout<<jedinice[i][j]<<" ";
            cout<<endl;
        }
    }
    else
        cout<<"nemoguce"<<endl;
	return 0;
}