#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct krv{
char Tip[2];
int potrebnaKol;
int unetaKol[4];	
}Krv;
int Provera(char s1[], char s2[]){
	int a = strlen(s1);
	int b = strlen(s2);
	int i;
	if(a != b){
		return 0;
	}
	for(i = 0; i < strlen(s1); i++){
		if(s1[i] != s2[i]){
			return 0;
		}
	}
	return 1;
}


int main(int argc, char *argv[]) {
int counter = 0;
int t = 0;
int N;
int O, A, B, AB;
int i = 0;
int j = 0;
int ukupno = 0;
scanf("%d", &N);
scanf("%d %d %d %d", &O, &A, &B, &AB);
	if(N < 0 || N > 10000){
	return 0;
	}	
	if(A + B + AB + O > 1000000){
		return 0;
	}
Krv k[N];
for(i = 0; i < N; i++){
	scanf("%s", &k[i].Tip);
	scanf("%d", &k[i].potrebnaKol);
	k[i].unetaKol[0] = 0;
	k[i].unetaKol[1] = 0;
	k[i].unetaKol[2] = 0;
	k[i].unetaKol[3] = 0;
}
for(i = 0; i < N; i++){
	if(Provera(k[i].Tip, "O")){
		if(O < k[i].potrebnaKol){
			counter++;
		}
		O -= k[i].potrebnaKol;
		k[i].unetaKol[0] = k[i].potrebnaKol;
	}
	if(Provera(k[i].Tip,"A")){
		if(O + A < k[i].potrebnaKol){
			counter++;
		}
		if(A < k[i].potrebnaKol){
				k[i].unetaKol[1] = A;
				k[i].potrebnaKol -= A;
				A = 0;
				O -= k[i].potrebnaKol;
				k[i].unetaKol[0] = k[i].potrebnaKol;
			
					
		}
		else{
		A -= k[i].potrebnaKol;
		k[i].unetaKol[1] = k[i].potrebnaKol;
		}
	}
		
			if(Provera(k[i].Tip,"B")){
		if(O + B < k[i].potrebnaKol){
			counter++;
		}
		if(B < k[i].potrebnaKol){
				
				k[i].unetaKol[2] = B;
				k[i].potrebnaKol -= B;
				B = k[i].potrebnaKol;
				O -= k[i].potrebnaKol;
				k[i].unetaKol[0] = k[i].potrebnaKol;

		}
		else{
		B -= k[i].potrebnaKol;
		k[i].unetaKol[2] = k[i].potrebnaKol;
		}
	}
		
			if(Provera(k[i].Tip,"AB")){
		if(O + AB + A + B < k[i].potrebnaKol){
			counter++;
		}
		if(AB < k[i].potrebnaKol){
			if(AB > 0 && k[i].potrebnaKol > 0){
				k[i].unetaKol[3] = AB;
				k[i].potrebnaKol -= AB;
				AB -= k[i].potrebnaKol;
				t = k[i].potrebnaKol;
			}
			if(B > 0 && k[i].potrebnaKol > 0){
				k[i].unetaKol[2] = B;
				k[i].potrebnaKol -= B;
				B -= k[i].potrebnaKol;
				t = k[i].potrebnaKol;
			}
			if(A > 0 && k[i].potrebnaKol > 0){
				k[i].unetaKol[1] = A ;
				k[i].potrebnaKol -= A;
				A -= k[i].potrebnaKol;
				t = k[i].potrebnaKol;
			}
			if(O > 0 && k[i].potrebnaKol > 0){
				k[i].unetaKol[0] = O ;
				k[i].potrebnaKol -= O;
				O -= k[i].potrebnaKol;
			}		
		}
		else{
		AB -= k[i].potrebnaKol;
		k[i].unetaKol[3] = k[i].potrebnaKol;
		}

		}
	}


	for(i = 0; i < N; i++){
		for(j = 0; j < 4; j++){
			ukupno += k[i].unetaKol[j];
		}
		printf("\n");
	}
			if(ukupno > 1000000){
		return 0;
	}
	if(counter > 0){
		printf("Nemoguce");
		return 0;
	}
	else{
		printf("Moguce\n");
	}
	
	for(i = 0; i < N; i++){
		for(j = 0; j < 4; j++){
			printf("%d", k[i].unetaKol[j]);
		}
		printf("\n");
	}
    return 0;
}