#include <bits/stdc++.h>
int n, m, a, b, c;
int col[111][111];
bool fg[11];
void fill(int il, int ir, int jl, int jr) {
  memset(fg, 0, sizeof(fg));
  if (jl)
    for (int i = il; i <= ir; i++) fg[col[i][jl - 1]] = 1;
  if (il)
    for (int j = jl; j <= jr; j++) fg[col[il - 1][j]] = 1;
  int k;
  for (k = 0; k < 11; k++)
    if (!fg[k]) break;
  for (int i = il; i <= ir; i++)
    for (int j = jl; j <= jr; j++) col[i][j] = k;
}
void big_fill(int n, int m) {
  for (int i = 0; i < n; i += 2) {
    for (int j = 0; j < m; j += 2) {
      memset(fg, 0, sizeof(fg));
      if (c) {
        fill(i, i + 1, j, j + 1), c--;
        continue;
      }
      if (a >= 2)
        fill(i, i, j, j + 1), fill(i + 1, i + 1, j, j + 1), a -= 2;
      else
        fill(i, i + 1, j, j), fill(i, i + 1, j + 1, j + 1), b -= 2;
    }
  }
}
void out() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      printf("%c", col[i][j] + 'a');
    }
    puts("");
  }
}
int main() {
  scanf("%d %d %d %d %d", &n, &m, &a, &b, &c);
  if (n * m % 2 == 1) {
    puts("IMPOSSIBLE");
    return 0;
  }
  if (n % 2 == 0 && m % 2 == 0) {
    a = a / 2 * 2;
    b = b / 2 * 2;
    if (c * 4 + b * 2 + a * 2 < n * m) {
      puts("IMPOSSIBLE");
      return 0;
    }
    big_fill(n, m);
    out();
  } else if (n % 2 == 0 && m % 2 != 0) {
    if (b < n / 2) {
      puts("IMPOSSIBLE");
      return 0;
    }
    b -= (n / 2);
    a = a / 2 * 2;
    b = b / 2 * 2;
    if (c * 4 + b * 2 + a * 2 < n * (m - 1)) {
      puts("IMPOSSIBLE");
      return 0;
    }
    big_fill(n, m - 1);
    for (int i = 0; i < n; i += 2) fill(i, i + 1, m - 1, m - 1);
    out();
  } else {
    if (a < m / 2) {
      puts("IMPOSSIBLE");
      return 0;
    }
    a -= (m / 2);
    a = a / 2 * 2;
    b = b / 2 * 2;
    if (c * 4 + a * 2 + b * 2 < (n - 1) * m) {
      puts("IMPOSSIBLE");
      return 0;
    }
    big_fill(n - 1, m);
    for (int i = 0; i < m; i += 2) fill(n - 1, n - 1, i, i + 1);
    out();
  }
}
