#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

struct osoba{
        int index;
        int kg;
        int potrebno;
        vector<int> dato;
};

bool uporedi1(osoba os1, osoba os2) {
    return os1.kg<os2.kg;
}

bool uporedi2(osoba os1, osoba os2) {
    return os1.index<os2.index;
}

int main()
{
    int n;
    cin >> n;
    vector<int> zalihe;
    for (int i=0;i<4;i++) {
        int a;
        cin >> a;
        zalihe.push_back(a);
    }
    string s;
    getline(cin, s);
    vector<osoba> osobe;
    for (int i=0;i<n;i++) {
        osoba os;
        os.index=i;
        string hg;
        int c;
        cin >> hg >> c;
        getline(cin, s);
        if (hg=="O") {
            os.kg=0;
        }
        else if (hg=="A") {
            os.kg=1;
        }
        else if (hg=="B") {
            os.kg=2;
        }
        else {
            os.kg=3;
        }
        os.potrebno=c;
        for (int j=0;j<4;j++) {
            os.dato.push_back(0);
        }
        osobe.push_back(os);
    }
    sort(osobe.begin(),osobe.end(), uporedi1) ;
    //for (int i =0;i<osobe.size();i++) {
    //   cout << osobe.at(i).index << endl;
    //}

    bool moze = true;
    for (int i = 0;i<osobe.size();i++) {
        int kg=osobe.at(i).kg;
        int p = osobe.at(i).potrebno;
        if (kg==0) {
            if (zalihe.at(0) < p) {
                moze = false;
                break;
            }
            zalihe.at(0) -= p;
            osobe.at(i).dato.at(0) += p;
        } else if (kg == 1) {
            if ((zalihe.at(0) + zalihe.at(1)) < p) {
                moze = false;
                break;
            }
            int d = (zalihe.at(1) > p) ? p : zalihe.at(1);
            zalihe.at(1) -= d;
            osobe.at(i).dato.at(1) += d;
            if (d < p) {
                zalihe.at(0) -= p-d;
                osobe.at(i).dato.at(0) += p-d;
            }
        } else if (kg == 2) {
            if ((zalihe.at(0) + zalihe.at(2)) < p) {
                moze = false;
                break;
            }
            int d = (zalihe.at(2) > p) ? p : zalihe.at(2);
            zalihe.at(2) -= d;
            osobe.at(i).dato.at(2) += d;
            if (d < p) {
                zalihe.at(0) -= p-d;
                osobe.at(i).dato.at(0) += p-d;
            }
        } else {
            if ((zalihe.at(0) + zalihe.at(1) + zalihe.at(2) + zalihe.at(3)) < p) {
                moze = false;
                break;
            }
            for (int k = 3; k >= 0; k--) {
                int d = (zalihe.at(k) > p) ? p : zalihe.at(k);
                zalihe.at(k) -= d;
                osobe.at(i).dato.at(k) += d;
                p -= d;
            }
        }
    }

    if (!moze) {
        cout << "nemoguce" << endl;
        return 0;
    }

    cout << "moguce" << endl;

    sort(osobe.begin(), osobe.end(), uporedi2);

    for (int i = 0; i < osobe.size(); i++) {
        for (int j = 0; j < 4; j++) {
            cout << osobe.at(i).dato.at(j) << " ";
        }
        cout << endl;
    }

    return 0;
}