#include <bits/stdc++.h>

using namespace std;

struct Coek {
    int treba;
    int index;
};

unordered_map<string, vector<Coek> > mapa;

//O, A, B, AB

bool moze(int treba[], int ima[]) {
    if(treba[0] > ima[0]) return false;
    ima[0] -= treba[0];
    treba[0] = 0;
    if(ima[1] + ima[0] < treba[1]) return false;
    if(ima[1] >= treba[1]) ima[1] -= treba[1];
    else {
        treba[1] -= ima[1];
        ima[1] = 0;
        ima[0] -= treba[1];
        treba[1] = 0;
    }
    if(ima[2] + ima[0] < treba[2]) return false;
    if(ima[2] >= treba[2]) ima[2] -= treba[2];
    else {
        treba[2] -= ima[2];
        ima[2] = 0;
        ima[0] -= treba[2];
        treba[2] = 0;
    }
    if(ima[0] + ima[1] + ima[2] + ima[3] < treba[3]) return false;
    return true;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n;
    cin >> n;
    int ima[4] = {0, 0, 0, 0}, treba[4] = {0, 0, 0, 0};
    cin >> ima[0] >> ima[1] >> ima[2] >> ima[3];
    for(int i = 0; i < n; i++) {
        string kg;
        int komada;
        cin >> kg >> komada;
        Coek coek;
        coek.treba = komada;
        coek.index = i;
        mapa[kg].push_back(coek);
        if(kg == "O") treba[0] += komada;
        if(kg == "A") treba[1] += komada;
        if(kg == "B") treba[2] += komada;
        if(kg == "AB") treba[3] += komada;
    }

    bool moguce = moze(treba, ima);
    cout << (moguce ? "moguce" : "nemoguce") << endl;
    if(!moguce) return 0;

    int sol[n][4];

    for(Coek i : mapa["O"]) {
        sol[i.index][0] = i.treba;
        ima[0] -= i.treba;
        sol[i.index][1] = sol[i.index][2] = sol[i.index][3] = 0;
    }
    for(Coek i : mapa["A"]) {
        int ind = i.index, treba = i.treba;
        sol[ind][0] = sol[ind][1] = sol[ind][2] = sol[ind][3] = 0;
        if(ima[1] >= treba) {
            ima[1] -= treba;
            sol[ind][1] = treba;
        }
        else {
            sol[ind][1] = ima[1];
            treba -= ima[1];
            ima[1] = 0;
            sol[ind][0] = treba;
            ima[0] -= treba;
        }
    }
    for(Coek i : mapa["B"]) {
        int ind = i.index, treba = i.treba;
        sol[ind][0] = sol[ind][1] = sol[ind][2] = sol[ind][3] = 0;
        if(ima[2] >= treba) {
            ima[2] -= treba;
            sol[ind][2] = treba;
            treba = 0;
        }
        else {
            sol[ind][2] = ima[2];
            treba -= ima[2];
            ima[2] = 0;
            sol[ind][0] = treba;
            ima[0] -= treba;
        }
    }
    for(Coek i : mapa["AB"]) {
        int ind = i.index, treba = i.treba;
        sol[ind][0] = sol[ind][1] = sol[ind][2] = sol[ind][3] = 0;
        if(ima[3] >= treba) {
            sol[ind][3] = treba;
            ima[3] -= treba;
        }
        else {
            sol[ind][3] = ima[3];
            treba -= ima[3];
            ima[3] = 0;
            if(ima[1] >= treba) {
                sol[ind][1] = treba;
                ima[1] -= treba;
            }
            else {
                sol[ind][1] = ima[1];
                treba -= ima[1];
                ima[1] = 0;
                if(ima[2] >= treba) {
                    sol[ind][2] = treba;
                    ima[2] -= treba;
                }
                else {
                    sol[ind][2] = ima[2];
                    treba -= ima[2];
                    ima[2] = 0;
                    sol[ind][0] = treba;
                    ima[0] -= treba;
                }
            }
        }
    }
    for(auto a : sol) {
        for(int i = 0; i < 4; i++) cout << a[i] << " ";
        cout << endl;
    }
    return 0;
}