#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <bits/stdc++.h>
 
using namespace std;
using namespace __gnu_pbds;
 
typedef long long ll;
typedef long double ld;
 
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pdd;
 
#define ff(i,a,b) for(int i = a; i <= b; i++)
#define fb(i,b,a) for(int i = b; i >= a; i--)
#define trav(a,x) for (auto& a : x)
 
#define sz(a) (int)(a).size()
#define pb push_back
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template<typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

// os.order_of_key(k) the number of elements in the os less than k
// *os.find_by_order(k)  print the k-th smallest number in os(0-based)

const int mod = 1000000007;
const int inf = 1e9 + 5;
const int mxN = 200005; 

int n;
int cnt[4]; // 0 - O, 1 - A, 2 - B, 3 - AB

pair<string,int> niz[mxN];

int res[mxN][4];

int main() {
    cin.tie(0)->sync_with_stdio(0);

    cin >> n;
    ff(i,0,3)cin >> cnt[i];
    ff(i,1,n)cin >> niz[i].fi >> niz[i].se;

    ff(i,1,n){
    	if(niz[i].fi == "O"){
    		
    		if(niz[i].se > cnt[0]){
    			cout << "nemoguce" << '\n';
    			return 0;
    		}

    		cnt[0] -= niz[i].se;
    		res[i][0] = niz[i].se;
    		niz[i].se = 0;

    	}
    }

    ff(i,1,n){

    	if(niz[i].fi == "A"){

    		if(cnt[1] + cnt[0] < niz[i].se){
    			cout << "nemoguce" << '\n';
    			return 0;
    		}

    		int mn = min(cnt[1], niz[i].se);
    		cnt[1] -= mn; niz[i].se -= mn;
    		res[i][1] = mn;

    		mn = min(cnt[0], niz[i].se);
    		cnt[0] -= mn; niz[i].se -= mn;
    		res[i][0] = mn;

    	}
    	if(niz[i].fi == "B"){

    	   	if(cnt[2] + cnt[0] < niz[i].se){
    			cout << "nemoguce" << '\n';
    			return 0;
    		}

    		int mn = min(cnt[2], niz[i].se);
    		cnt[2] -= mn; niz[i].se -= mn;
    		res[i][2] = mn;

    		mn = min(cnt[0], niz[i].se);
    		cnt[0] -= mn; niz[i].se -= mn;
    		res[i][0] = mn;	

    	}

    }

    ff(i,1,n){

    	if(niz[i].fi == "AB"){

    		if(cnt[0] + cnt[1] + cnt[2] + cnt[3] < niz[i].se){
    			cout << "nemoguce" << '\n';
    			return 0;
    		}
    		
    		int mn = min(cnt[3], niz[i].se);
    		cnt[3] -= mn; niz[i].se -= mn;
    		res[i][3] = mn;

    		mn = min(cnt[2], niz[i].se);
    		cnt[2] -= mn; niz[i].se -= mn;
    		res[i][2] = mn;

    		mn = min(cnt[1], niz[i].se);
    		cnt[1] -= mn; niz[i].se -= mn;
    		res[i][1] = mn;

    		mn = min(cnt[0], niz[i].se);
    		cnt[0] -= mn; niz[i].se -= mn;
    		res[i][0] = mn;	

    	}

    }

    cout << "moguce" << '\n';
    ff(i,1,n){
    	ff(j,0,3)cout << res[i][j] << " ";
    	cout << '\n';
    }

    return 0;
}
/*
 

 
// probati bojenje sahovski
*/