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

struct transf{
	long long O = 0;
	long long A = 0;
	long long B = 0;
	long long AB = 0;
};

bool cmp(const tuple<char, long long, long long> &f,const tuple <char, long long, long long> &s){
	// O, A, B, C
	if(get<0>(f) == 'O')return true;
	if(get<0>(s) == 'O')return false;
	return get<0>(f) < get<0>(s);
}

int main(){
	long long N, Ou, Au, Bu, ABu,pom;
	char c,input[2];

	vector<tuple <char, long long, long long>> pacijenti;
	cin >> N >> Ou >> Au >> Bu >> ABu;//konverzija AB u C
	vector<transf> krv(N);
	for (long long i = 0;i < N;i++){
		cin >> input >> pom;
		input[1] == 'B'?c = 'C':c = input[0];
		
		pacijenti.push_back(make_tuple(c, pom,i)); 
		
	}
	sort(pacijenti.begin(),pacijenti.end(),cmp);	
	// NlogN
	long long i = 0;
		while(get<0>(pacijenti[i]) == 'O') { 
		Ou -= get<1>(pacijenti[i]);
		if (Ou < 0){
			cout << "nemoguce\n";
			return 0;
		}
		krv[get<2>(pacijenti[i])].O += get<1>(pacijenti[i]);	
		i++;// ovo zavrsava sve pacijente O grupe
		}
		// za A i B ako nema nijedne A i B onda krecu da uzimaju O, ako toga nema kraj
		while( get<0>(pacijenti[i]) == 'A' ){ 
			long long m_o = 0, m_a = 0, koliko = get<1>(pacijenti[i]); 	
			if(koliko > Au){
			m_o = koliko - Au;
			Ou -= m_o;
			m_a = Au;
			Au = 0;
			}

			else{
		       	Au -= koliko;
			m_a = koliko;
			}

			if(Au == 0 && Ou < 0){
				cout << "nemoguce\n";
				return 0;
			}	
			
			krv[get<2>(pacijenti[i])].A += m_a ;
			krv[get<2>(pacijenti[i])].O += m_o;	
			i++;
		}
		//B

		while( get<0>(pacijenti[i]) == 'B' ){ 
			long long m_o = 0, m_b = 0, koliko = get<1>(pacijenti[i]); 	
			if(koliko > Bu){
			m_o = koliko - Bu;
			Ou -= m_o;
			m_b = Bu;
			Bu = 0;
			}

			else{
		       	Bu -= koliko;
			m_b = koliko;
			}

			if(Bu == 0 && Ou < 0){
				cout << "nemoguce\n";
				return 0;
			}	
			
			krv[get<2>(pacijenti[i])].B += m_b;
			krv[get<2>(pacijenti[i])].O += m_o;	
			i++;
		}
		
		while( get<0>(pacijenti[i]) == 'C' ){ 
			long long m_o = 0, m_a = 0, m_b = 0,m_ab = 0,koliko = get<1>(pacijenti[i]); 
			if( Au+Bu+Ou+ABu < koliko ){
				cout << "nemoguce\n";
				return 0;
			}	
			m_a = min(Au, koliko);
			m_b = min(Bu, koliko- m_a);
			m_o = min(Ou, koliko-(m_a + m_b));
			m_ab = min(ABu, koliko-(m_a + m_b + m_o));
			Au -= m_a;Bu -= m_b;Ou -=m_o;ABu -=m_ab; 
			krv[get<2>(pacijenti[i])].O += m_o;
			krv[get<2>(pacijenti[i])].A += m_a;	
			krv[get<2>(pacijenti[i])].B += m_b;
			krv[get<2>(pacijenti[i])].AB += m_ab;	
			i++;
		}		

	cout << "moguce\n";
	for (auto stt: krv){
		cout << stt.O << " " << stt.A << " "<< stt.B << " " << stt.AB << "\n";
	}

	return 0;
}