#include <bits/stdc++.h>
bool debug = false;
using namespace std;
long long convertToNum(string s) {
  long long val = 0;
  for (int i = 0; i < (s.size()); i++) val = val * 10 + s[i] - '0';
  return val;
}
string convertToString(long long a) {
  string res = "";
  if (!a) return "0";
  while (a) {
    res = (char)(a % 10 + 48) + res;
    a /= 10;
  }
  return res;
}
long long GCD(long long x, long long y) {
  if (!x) return y;
  if (!y) return x;
  if (x == y) return x;
  if (x < y)
    return GCD(x, y % x);
  else
    return GCD(x % y, y);
}
long long POW(long long x, long long y, long long Base) {
  if (!y) return 1;
  long long u = POW(x, y / 2, Base);
  u = (u * u) % Base;
  if (y & 1)
    return (u * x) % Base;
  else
    return u;
}
int n, m, a, b, c;
char res[104][104];
int dd[300], TEST;
char find(int i, int j) {
  TEST++;
  dd[res[i - 1][j]] = dd[res[i][j - 1]] = dd[res[i + 1][j - 1]] =
      dd[res[i - 1][j + 1]] = TEST;
  for (int i = ('a'); i <= ('x'); i++)
    if (dd[i] != TEST && dd[i + 1] != TEST) return i;
}
int main() {
  cin >> m >> n >> a >> b >> c;
  if ((m % 2) && (n % 2)) {
    cout << "IMPOSSIBLE" << endl;
    return 0;
  }
  int M = m, N = n;
  for (int i = (0); i <= (M); i++)
    for (int j = (0); j <= (N); j++) res[i][j] = 'Z';
  if (m % 2) {
    for (int j = (1); j <= (n); j++) {
      if (j % 4 == 1 || j % 4 == 2)
        res[m][j] = 'z';
      else
        res[m][j] = 'y';
    }
    a -= n / 2;
    if (a < 0) {
      cout << "IMPOSSIBLE" << endl;
      return 0;
    }
    m--;
  }
  if (n % 2) {
    for (int j = (1); j <= (m); j++) {
      if (j % 4 == 1 || j % 4 == 2)
        res[j][n] = 'z';
      else
        res[j][n] = 'y';
    }
    b -= m / 2;
    if (b < 0) {
      cout << "IMPOSSIBLE" << endl;
      return 0;
    }
    n--;
  }
  if (a % 2) a--;
  if (b % 2) b--;
  if (a * 2 + b * 2 + c * 4 < m * n) {
    cout << "IMPOSSIBLE" << endl;
    return 0;
  }
  char start = 'a';
  for (int r1 = 0; r1 < (m / 2); r1++) {
    for (int r2 = 0; r2 < (n / 2); r2++) {
      int i = r1 * 2 + 1;
      int j = r2 * 2 + 1;
      char s = find(i, j);
      if (a >= 2) {
        res[i][j] = s;
        res[i][j + 1] = s;
        res[i + 1][j] = s + 1;
        res[i + 1][j + 1] = s + 1;
        a -= 2;
        continue;
      }
      if (b >= 2) {
        res[i][j] = res[i + 1][j] = s;
        res[i][j + 1] = res[i + 1][j + 1] = s + 1;
        b -= 2;
        continue;
      }
      if (c) {
        res[i][j] = res[i + 1][j] = res[i + 1][j + 1] = res[i][j + 1] = s;
        c--;
        continue;
      }
      cout << "IMPOSSIBLE" << endl;
      return 0;
    }
  }
  for (int i = (1); i <= (M); i++) {
    for (int j = (1); j <= (N); j++) cout << res[i][j];
    cout << endl;
  }
  return 0;
}
