#include <bits/stdc++.h>
const long long p = 2000000007;
char s1[1000000];
int as[3 * 1000000] = {0};
int ae[3 * 1000000] = {0};
int abs(int a) {
  if (a < 0) return -a;
  return a;
}
char A[200][200];
int main() {
  int n, m, a, b, c;
  scanf("%d%d%d%d%d", &n, &m, &a, &b, &c);
  if (n * m % 2 == 1) {
    printf("IMPOSSIBLE");
    return 0;
  } else if (n % 2 == 1) {
    if (m / 2 <= a) {
      for (int i = 0; i < m; i += 2)
        A[n - 1][i + 1] = A[n - 1][i] = (i / 2 % 2 == 0) ? 'a' : 'b';
      a -= m / 2;
    } else {
      printf("IMPOSSIBLE");
      return 0;
    }
  } else if (m % 2 == 1) {
    if (n / 2 <= b) {
      for (int i = 0; i < n; i += 2)
        A[i + 1][m - 1] = A[i][m - 1] = (i / 2 % 2 == 0) ? 'a' : 'b';
      b -= n / 2;
    } else {
      printf("IMPOSSIBLE");
      return 0;
    }
  }
  if (a / 2 + b / 2 + c >= (n / 2) * (m / 2)) {
    for (int i = 0; i < n / 2 * 2; i += 2)
      for (int j = 0; j < m / 2 * 2; j += 2) {
        if (c > 0) {
          A[i][j] = ((i / 2 + j / 2) % 2) ? 'c' : 'd';
          A[i + 1][j] = ((i / 2 + j / 2) % 2) ? 'c' : 'd';
          A[i][j + 1] = ((i / 2 + j / 2) % 2) ? 'c' : 'd';
          A[i + 1][j + 1] = ((i / 2 + j / 2) % 2) ? 'c' : 'd';
          c--;
        } else if (b > 1) {
          A[i][j] = ((i / 2) % 2) ? 'e' : 'f';
          ;
          A[i + 1][j] = ((i / 2) % 2) ? 'e' : 'f';
          A[i][j + 1] = ((i / 2) % 2) ? 'f' : 'e';
          A[i + 1][j + 1] = ((i / 2) % 2) ? 'f' : 'e';
          b -= 2;
        } else if (a > 1) {
          A[i][j] = ((j / 2) % 2) ? 'g' : 'h';
          ;
          A[i + 1][j] = ((j / 2) % 2) ? 'h' : 'g';
          ;
          A[i][j + 1] = ((j / 2) % 2) ? 'g' : 'h';
          ;
          A[i + 1][j + 1] = ((j / 2) % 2) ? 'h' : 'g';
          ;
          a -= 2;
        }
      }
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) printf("%c", A[i][j]);
      printf("\n");
    }
  } else {
    printf("IMPOSSIBLE");
    return 0;
  }
}
