#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
const int maxn = 105;
int n, m, a, b, c;
char mat[maxn][maxn];
void draw(int x, int y, char c) {
  mat[x][y] = mat[x + 1][y] = mat[x][y + 1] = mat[x + 1][y + 1] = c;
}
void gao() {
  if (n * m % 2 == 1) {
    puts("IMPOSSIBLE");
    return;
  }
  int tot = a * 2 + b * 2 + c * 4;
  if (tot < n * m) {
    puts("IMPOSSIBLE");
    return;
  }
  int i, j, k;
  memset(mat, 0, sizeof mat);
  for (i = 0; i < n / 2; ++i) {
    int x0 = i * 2;
    if (i % 2 == 0) {
      for (j = 0; j < m / 2; ++j) {
        int y0 = j * 2;
        draw(x0, y0, j % 2 == 1 ? 'a' : 'b');
        --c;
      }
    } else {
      for (j = 0; j < m / 2; ++j) {
        int y0 = j * 2;
        draw(x0, y0, j % 2 == 1 ? 'c' : 'd');
        --c;
      }
    }
  }
  if (n % 2 == 1 || m % 2 == 1) {
    if (n % 2 == 1) {
      for (i = 0; i < m / 2; ++i) {
        mat[n - 1][i * 2] = mat[n - 1][i * 2 + 1] = (i % 2 ? 'e' : 'f');
        --a;
      }
    } else {
      for (i = 0; i < n / 2; ++i) {
        mat[i * 2][m - 1] = mat[i * 2 + 1][m - 1] = (i % 2 ? 'e' : 'f');
        --b;
      }
    }
  }
  bool flg = 1;
  if (c < 0) {
    for (i = 0; i < n / 2 && c < 0; ++i) {
      int x0 = i * 2;
      if (i % 2 == 0) {
        for (j = 0; j < m / 2 && c < 0; ++j) {
          int y0 = j * 2;
          if (a > b) {
            a -= 2;
            if (j % 2 == 1) {
              mat[x0][y0] = mat[x0][y0 + 1] = 'g';
              mat[x0 + 1][y0] = mat[x0 + 1][y0 + 1] = 'h';
            } else {
              mat[x0][y0] = mat[x0][y0 + 1] = 'x';
              mat[x0 + 1][y0] = mat[x0 + 1][y0 + 1] = 'y';
            }
            ++c;
          } else {
            b -= 2;
            if (j % 2 == 1) {
              mat[x0][y0] = mat[x0 + 1][y0] = 'g';
              mat[x0][y0 + 1] = mat[x0 + 1][y0 + 1] = 'h';
            } else {
              mat[x0][y0] = mat[x0 + 1][y0] = 'x';
              mat[x0][y0 + 1] = mat[x0 + 1][y0 + 1] = 'y';
            }
            ++c;
          }
        }
      } else {
        for (j = 0; j < m / 2 && c < 0; ++j) {
          int y0 = j * 2;
          if (a > b) {
            a -= 2;
            if (j % 2 == 1) {
              mat[x0][y0] = mat[x0][y0 + 1] = 'i';
              mat[x0 + 1][y0] = mat[x0 + 1][y0 + 1] = 'j';
            } else {
              mat[x0][y0] = mat[x0][y0 + 1] = 'k';
              mat[x0 + 1][y0] = mat[x0 + 1][y0 + 1] = 'l';
            }
            ++c;
          } else {
            b -= 2;
            if (j % 2 == 1) {
              mat[x0][y0] = mat[x0 + 1][y0] = 'i';
              mat[x0][y0 + 1] = mat[x0 + 1][y0 + 1] = 'j';
            } else {
              mat[x0][y0] = mat[x0 + 1][y0] = 'k';
              mat[x0][y0 + 1] = mat[x0 + 1][y0 + 1] = 'l';
            }
            ++c;
          }
        }
      }
    }
  }
  if (a < 0 || b < 0 || c < 0)
    puts("IMPOSSIBLE");
  else
    for (i = 0; i < n; ++i) puts(mat[i]);
}
int main() {
  while (cin >> n >> m >> a >> b >> c) {
    gao();
  }
  return 0;
}
