#include <bits/stdc++.h>
using namespace std;
vector<string> vs;
int bisa[27];
void place(int row, int col, int dr, int dc) {
  memset(bisa, 1, sizeof(bisa));
  for (int i = row - 1; i < row + dr + 1; i++)
    for (int j = col - 1; j < col + dc + 1; j++)
      if ((i < row || i >= row + dr) ^ (j < col || j >= col + dc)) {
        bisa[vs[i][j] - 'a'] = 0;
      }
  for (int z = 0; z < 26; z++)
    if (bisa[z]) {
      for (int i = 0; i < dr; i++)
        for (int j = 0; j < dc; j++) vs[row + i][col + j] = (char)('a' + z);
      return;
    }
}
int transpose = 0;
void gagal() { cout << "IMPOSSIBLE\n"; }
void solve(int n, int m, int a, int b, int c) {
  if (n * m % 2 == 1) {
    gagal();
    return;
  }
  vs = vector<string>(n + 2, string(m + 2, (char)('z' + 1)));
  int orgn = n;
  if (n % 2) {
    for (int i = 0; i < m; i += 2) {
      if (a == 0) {
        gagal();
        return;
      }
      a--;
      place(n, i + 1, 1, 2);
    }
    n--;
  }
  for (int i = 0; i < n; i += 2) {
    for (int j = 0; j < m; j += 2) {
      if (c) {
        place(i + 1, j + 1, 2, 2);
        c--;
        continue;
      }
      if (a >= 2) {
        place(i + 1, j + 1, 1, 2);
        place(i + 2, j + 1, 1, 2);
        a -= 2;
        continue;
      }
      if (b >= 2) {
        place(i + 1, j + 1, 2, 1);
        place(i + 1, j + 2, 2, 1);
        b -= 2;
        continue;
      }
      gagal();
      return;
    }
  }
  n = orgn;
  if (!transpose) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cout << vs[i + 1][j + 1];
      cout << endl;
    }
    return;
  }
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) cout << vs[j + 1][i + 1];
    cout << endl;
  }
  return;
}
int main() {
  int n, m, a, b, c;
  cin >> n >> m >> a >> b >> c;
  if (m % 2) {
    transpose = 1;
    solve(m, n, b, a, c);
  } else {
    solve(n, m, a, b, c);
  }
  return 0;
}
