using System;

class Program {
  struct Pacijenti
  {
    public string grupa;
    public int broj_grupa;
    public int redni_broj;
  }
  static int Grupa(string koja_grupa)
  {
    if(koja_grupa == "O") return 0;
    else if(koja_grupa == "A") return 1;
    else if(koja_grupa == "B") return 2;
    else return 3;
  }
  static void Postoji(int[] bolnica, Pacijenti[] pacijenti, int[] koliko, int koji, int i)
  {
    if(bolnica[koji] > 0)
    {
      //Console.WriteLine("pacijenti metoda {0} ", pacijenti[i].broj_grupa);
      koliko[koji] += Math.Abs(bolnica[koji] - pacijenti[i].broj_grupa);
      int broj = Math.Abs(bolnica[koji] - pacijenti[i].broj_grupa);
      //Console.WriteLine(Math.Abs(bolnica[koji] - pacijenti[i].broj_grupa));
      //Console.WriteLine("koliko {0} ", koliko[koji]);
      bolnica[koji] -= broj;
      pacijenti[i].broj_grupa -= broj;
      //Console.WriteLine("pacijenti metoda {0} ", pacijenti[i].broj_grupa);
    }
  }
  static void Moguce(Pacijenti[] pacijenti, int[] bolnica)
  {
    string[] ispis = new string[pacijenti.Length];
    bool da = true;
    int[] koliko = new int[4];
    for(int i = 0;i < pacijenti.Length;i++)
    {
      if(pacijenti[i].redni_broj == 0) 
      {
        Postoji(bolnica, pacijenti, koliko, 0, i);
        if(koliko[0] == 0) da = false;
        else ispis[i] = pacijenti[i].broj_grupa +" 0 0 0";
      }
      else if(pacijenti[i].redni_broj == 1)
      {
        while(pacijenti[i].redni_broj > 0) Postoji(bolnica, pacijenti, koliko, 1, i);
        //Console.WriteLine("pacijenti {0} ", pacijenti[i].broj_grupa);
        if(pacijenti[i].broj_grupa > 0) Postoji(bolnica, pacijenti, koliko, 0, i);
        //Console.WriteLine("pacijenti {0} ", pacijenti[i].broj_grupa);
        if(koliko[0] == 0 && koliko[1] == 0) da = false;
        ispis[i] = koliko[0]+ " "+koliko[1]+" 0 0";
      } 
      else if(pacijenti[i].redni_broj == 2)
      {
        while(pacijenti[i].redni_broj > 0) Postoji(bolnica, pacijenti, koliko, 2, i);
        if(pacijenti[i].broj_grupa > 0) Postoji(bolnica, pacijenti, koliko, 0, i);
        if(koliko[0] == 0 && koliko[2] == 0) da = false;
        ispis[i] = koliko[0]+ " 0 "+koliko[2]+" 0";
      }
      else
      {
        while(pacijenti[i].redni_broj > 0 && da)
        {
          Postoji(bolnica, pacijenti, koliko, 3, i);
          if(pacijenti[i].broj_grupa > 0) Postoji(bolnica, pacijenti, koliko, 2, i);
          //Console.WriteLine("pacijenti {0} ", pacijenti[i].broj_grupa);
          if(pacijenti[i].broj_grupa > 0) Postoji(bolnica, pacijenti, koliko, 1, i);
          //Console.WriteLine("pacijenti {0} ", pacijenti[i].broj_grupa);
          if(pacijenti[i].broj_grupa > 0) Postoji(bolnica, pacijenti, koliko, 0, i);
          //Console.WriteLine("pacijenti {0} ", pacijenti[i].broj_grupa);
          if(koliko[3] == 0 && koliko[0] == 0 && koliko[2] == 0) da = false;
        }
        ispis[i] = koliko[0]+" "+koliko[1]+" "+koliko[2]+" "+koliko[3];
      }
      koliko[0] = 0; koliko[1] = 0; koliko[2] = 0; koliko[3] = 0;
    }
    if(!da) Console.WriteLine("nemoguce");
    else
    {
      Console.WriteLine("moguce");
      for(int j = 0;j < ispis.Length;j++) Console.WriteLine(ispis[j]);
    } 
  }
  public static void Main (string[] args) {
    int N = int.Parse(Console.ReadLine());
    string[] s = Console.ReadLine().Split();
    int[] bolnica = new int[4];
    for(int j = 0;j < 4;j++) bolnica[j] = int.Parse(s[j]);
    Pacijenti[] pacijenti = new Pacijenti[N];
    for(int i = 0;i < N;i++)
    {
      string[] pacijent = Console.ReadLine().Split();
      pacijenti[i].grupa = pacijent[0];
      pacijenti[i].broj_grupa = int.Parse(pacijent[1]);
      pacijenti[i].redni_broj = Grupa(pacijenti[i].grupa);
    }
    Moguce(pacijenti, bolnica);
  }
}