/*
TASK:LEDAI
LANG:C
*/

/*
Linas Petrauskas
Vilniaus jėzuitų gimnazija
4B klasė
*/

#include <stdio.h>

#define FILE_IN  "ledai.dat"
#define FILE_OUT "ledai.rez"

#define MAX 60

  struct pinigai
    {
      int po1, po2, po5;
    };

  struct pinigai visi, kasa;
  int seka[MAX], buvo, V;
  FILE * out;

  void read_data(void)
    {
      FILE * f = fopen(FILE_IN, "r");
      fscanf(f, "%d %d %d", &visi.po1, &visi.po2, &visi.po5);
      fclose(f);
      V = visi.po1 + visi.po2 + visi.po5;
    }

  void spausdink(void)
    {
      int i;
      for (i = 0; i < V; i++)
        fprintf(out, "%d ", seka[i]);
      fprintf(out, "\n");
      buvo = 1;
    }

  int yra_grazos(int moneta, struct pinigai * kasa)
    {
      struct pinigai prad = *kasa;
      switch (moneta)
        {
          case 1 : kasa->po1++; return 1;
          case 2 : if (kasa->po1)
            {
              kasa->po1--;
              kasa->po2++;
              return 1;
            }
            break;
          case 5 :
            {
              while ((kasa->po2) && (moneta > 1))
                {
                  moneta -= 2;
                  kasa->po2--;
                }
              if (kasa->po1 >= moneta - 1)
                {
                  kasa->po1 -= (moneta - 1);
                  kasa->po5++;
                  return 1;
                }
            }
        }
      *kasa = prad;
      return 0;
    }

  void ieskok(struct pinigai p, struct pinigai k, int n)
    {
      struct pinigai t, tk;
      if (!(p.po1 || p.po2 || p.po5))
        spausdink();
      else
        {
          // atmetimas, ko nereikia
          if (p.po2 > (k.po1 + p.po1)) return;
          if (4 * p.po5 > ((p.po1 + k.po1 - p.po2) + 2 * (p.po2 + k.po2))) return;
          // ....
          if (p.po1)
            {
              tk = k;
              if (yra_grazos(1, &k))
                {
                  seka[n] = 1;
                  t = p;
                  t.po1--;
                  ieskok(t, k, n + 1);
                }
              k = tk;
            }
          if (p.po2)
            {
              tk = k;
              if (yra_grazos(2, &k))
                {
                  seka[n] = 2;
                  t = p;
                  t.po2--;
                  ieskok(t, k, n + 1);
                }
              k = tk;
            }
          if (p.po5)
            {
              tk = k;
              if (yra_grazos(5, &k))
                {
                  seka[n] = 5;
                  t = p;
                  t.po5--;
                  ieskok(t, k, n + 1);
                }
              k = tk;
            }
        }
    }

  int main (void)
    {
      read_data();
      out = fopen(FILE_OUT, "w");
      kasa.po1 = kasa.po2 = kasa.po5 = 0;
      buvo = 0;
      ieskok(visi, kasa, 0);
      if (!buvo) fprintf(out, "0");
      fclose(out);
      return 0;
    }