#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline long long lin() {
  long long x;
  scanf("%lld", &x);
  return x;
}
const int maxn = 100 + 10;
inline void fail() {
  cout << "IMPOSSIBLE\n";
  exit(0);
}
pair<int, int> moves[] = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
int n, m, a, b, c;
int res[maxn][maxn];
int N, M;
inline bool ok(int i, int j, int val) {
  for (int pt = 0; pt < 4; pt++) {
    int i2 = i + moves[pt].first, j2 = j + moves[pt].second;
    if (i2 >= 0 && j2 >= 0 && i2 < N && j2 < M && res[i2][j2] == val)
      return false;
  }
  return true;
}
int32_t main() {
  n = in(), m = in(), a = in(), b = in(), c = in();
  memset(res, -1, sizeof res);
  if (n % 2 && m % 2) fail();
  N = n, M = m;
  if (m % 2) {
    if (n / 2 > b) fail();
    b -= n / 2;
    for (int pt = 0; pt < n; pt += 2) {
      for (int val = 0; val < 26; val++) {
        if (ok(pt, m - 1, val) && ok(pt + 1, m - 1, val)) {
          res[pt][m - 1] = res[pt + 1][m - 1] = val;
          break;
        }
      }
    }
    m--;
  }
  if (n % 2) {
    if (m / 2 > a) fail();
    a -= m / 2;
    for (int pt = 0; pt < m; pt += 2) {
      for (int val = 0; val < 26; val++) {
        if (ok(n - 1, pt, val) && ok(n - 1, pt + 1, val)) {
          res[n - 1][pt] = res[n - 1][pt + 1] = val;
          break;
        }
      }
    }
    n--;
  }
  b -= b % 2, a -= a % 2;
  if (2 * a + 2 * b + 4 * c < n * m) fail();
  for (int i = 0; i < n; i += 2) {
    for (int j = 0; j < m; j += 2) {
      if (c) {
        for (int val = 0; val < 26; val++) {
          if (ok(i, j, val) && ok(i, j + 1, val) && ok(i + 1, j, val) &&
              ok(i + 1, j + 1, val)) {
            res[i][j] = res[i][j + 1] = res[i + 1][j] = res[i + 1][j + 1] = val;
            break;
          }
        }
        c--;
      } else {
        if (a) {
          for (int Row = i; Row <= i + 1; Row++) {
            for (int val = 0; val < 26; val++) {
              if (ok(Row, j, val) && ok(Row, j + 1, val)) {
                res[Row][j] = res[Row][j + 1] = val;
                break;
              }
            }
          }
          a -= 2;
        } else {
          for (int Column = j; Column <= j + 1; Column++) {
            for (int val = 0; val < 26; val++) {
              if (ok(i, Column, val) && ok(i + 1, Column, val)) {
                res[i][Column] = res[i + 1][Column] = val;
                break;
              }
            }
          }
          b -= 2;
        }
      }
    }
  }
  for (int i = 0; i < N; i++, cout << "\n") {
    for (int j = 0; j < M; j++) {
      cout << char(res[i][j] + 'a');
    }
  }
}
