#include <bits/stdc++.h>
using namespace std;

#define ADD_LINE(x) __LINE__ ## x
#define koristi_krv(a) int ADD_LINE(a) = min(kolicina, a); arr[mapi[#a]] = ADD_LINE(a); a -= ADD_LINE(a); kolicina -= ADD_LINE(a);


#define pa_da_li_je_moguce(kolicina) \
		if (kolicina > 0) {\
			cout << "nemoguce" << endl;\
			return 0;\
		} \

int main(int argc, char const *argv[])
{
	int n;
	cin >> n;
	int O, A, B, AB;
	cin >> O >> A >> B >> AB;
	vector<pair<pair<string, int>, int>> veci(n);
	vector<array<int, 4>> vec(n);

	for (int i = 0; i < n; i++) {
		cin >> veci[i].first.first >> veci[i].first.second;
		veci[i].second = i;
	}

	unordered_map<string, int> mapi;
	mapi["O"] = 0; mapi["A"] = 1; mapi["B"] = 2; mapi["AB"] = 3;

	sort(veci.begin(), veci.end(), [&](const pair<pair<string, int>, int>& a, const pair<pair<string, int>, int>& b) {
		return (mapi[a.first.first] < mapi[b.first.first]) || ((mapi[a.first.first] == mapi[b.first.first]) && (a.first.second > b.first.second));
	});

	for (int i = 0; i < n; i++) {
		array<int, 4> arr = {0, 0, 0, 0};
		const string grupa = veci[i].first.first;
		int kolicina = veci[i].first.second;
		if (grupa == "O") {
			koristi_krv(O);
			pa_da_li_je_moguce(kolicina);
		}
		else if (grupa == "A") {
			koristi_krv(A);
			koristi_krv(O);
			pa_da_li_je_moguce(kolicina);
		}
		else if (grupa == "B") {
			koristi_krv(B);
			koristi_krv(O);
			pa_da_li_je_moguce(kolicina);
		}
		else if (grupa == "AB") {
			koristi_krv(AB);
			koristi_krv(A);
			koristi_krv(B);
			koristi_krv(O);
			pa_da_li_je_moguce(kolicina);
		}
		vec[veci[i].second] = arr;
	}

	cout << "moguce" << endl;
	for (size_t i = 0; i < vec.size(); i++) {
		cout << vec[i][0] << " " << vec[i][1] << " " << vec[i][2] << " " << vec[i][3] << endl;
	}
	return 0;
}