#include <bits/stdc++.h>
char w[105][105];
void crossoff(int r[], int x, int y) {
  for (int i = -1; i <= 1; i++)
    for (int j = -1; j <= 1; j++)
      if ((i == 0) + (j == 0) == 1 && w[x + i][y + j]) {
        r[w[x + i][y + j] - 'a'] = 1;
      }
}
int tryfill(int n, int m, int a, int b, int c) {
  int pn = n, pm = m;
  if (n * m % 2 == 1) return 0;
  if (n % 2 == 1 && (a < m / 2)) return 0;
  if (m % 2 == 1 && (b < n / 2)) return 0;
  int i, j, k;
  if (n % 2 == 1) {
    i = n;
    for (j = 1; j <= m; j += 2) {
      --a;
      int r[26] = {};
      crossoff(r, i, j);
      crossoff(r, i, j + 1);
      for (k = 0; k < 26; k++)
        if (!r[k]) break;
      w[i][j] = w[i][j + 1] = k + 'a';
    }
    --n;
  }
  if (m % 2 == 1) {
    j = m;
    for (i = 1; i <= n; i += 2) {
      --b;
      int r[26] = {};
      crossoff(r, i, j);
      crossoff(r, i + 1, j);
      for (k = 0; k < 26; k++)
        if (!r[k]) break;
      w[i][j] = w[i + 1][j] = k + 'a';
    }
    --m;
  }
  for (i = 1; i <= n; i += 2)
    for (j = 1; j <= m; j += 2)
      if (c) {
        --c;
        int r[26] = {};
        crossoff(r, i, j);
        crossoff(r, i, j + 1);
        crossoff(r, i + 1, j);
        crossoff(r, i + 1, j + 1);
        for (k = 0; k < 26; k++)
          if (!r[k]) break;
        w[i][j] = w[i][j + 1] = w[i + 1][j] = w[i + 1][j + 1] = k + 'a';
      } else if (a >= 2) {
        {
          --a;
          int r[26] = {};
          crossoff(r, i, j);
          crossoff(r, i, j + 1);
          for (k = 0; k < 26; k++)
            if (!r[k]) break;
          w[i][j] = w[i][j + 1] = k + 'a';
        }
        {
          --a;
          int r[26] = {};
          crossoff(r, i + 1, j);
          crossoff(r, i + 1, j + 1);
          for (k = 0; k < 26; k++)
            if (!r[k]) break;
          w[i + 1][j] = w[i + 1][j + 1] = k + 'a';
        }
      } else if (b >= 2) {
        {
          --b;
          int r[26] = {};
          crossoff(r, i, j);
          crossoff(r, i + 1, j);
          for (k = 0; k < 26; k++)
            if (!r[k]) break;
          w[i][j] = w[i + 1][j] = k + 'a';
        }
        {
          --b;
          int r[26] = {};
          crossoff(r, i, j + 1);
          crossoff(r, i + 1, j + 1);
          for (k = 0; k < 26; k++)
            if (!r[k]) break;
          w[i][j + 1] = w[i + 1][j + 1] = k + 'a';
        }
      } else
        return 0;
  for (i = 1; i <= pn; i++) printf("%s\n", w[i] + 1);
  return 1;
}
int main(void) {
  int n, m, a, b, c;
  scanf("%d%d%d%d%d", &n, &m, &a, &b, &c);
  if (a * 2 + b * 2 + c * 4 < n * m)
    puts("IMPOSSIBLE");
  else if (tryfill(n, m, a, b, c)) {
  } else
    puts("IMPOSSIBLE");
  return 0;
}
