#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const long long INF = 1e18;
const int mod = 1e9 + 7;
const double pi = 2 * acos(0);
int x[] = {-1, -1, 0, 1};
int y[] = {0, 1, -1, -1};
char arr[105][105];
char get(int i, int j) {
  map<char, bool> mp;
  for (int z = 0; z < 4; z++) {
    int curi = i + x[z];
    int curj = j + y[z];
    if (curi >= 0 && curj >= 0) {
      mp[arr[curi][curj]] = true;
    }
  }
  for (int z = 'a'; z <= 'z'; z++) {
    if (!mp[z]) return z;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  int n, m, a, b, c;
  cin >> n >> m >> a >> b >> c;
  if (n % 2 && m % 2) return cout << "IMPOSSIBLE", 0;
  char x = 'a';
  if (n % 2) {
    for (int i = 0; i < m; i += 2) {
      arr[0][i] = arr[0][i + 1] = x++, a--;
      if (x == 'z') x = 'a';
    }
  }
  if (m % 2) {
    for (int i = 0; i < n; i += 2) {
      arr[i][0] = arr[i + 1][0] = x++, b--;
      if (x == 'z') x = 'a';
    }
  }
  if (a < 0 || b < 0) return cout << "IMPOSSIBLE", 0;
  for (int i = n % 2; i < n; i += 2) {
    for (int j = m % 2; j < m; j += 2) {
      char cc = get(i, j);
      if (c)
        arr[i][j] = arr[i][j + 1] = arr[i + 1][j] = arr[i + 1][j + 1] = cc, c--;
      else if (a > 1) {
        arr[i][j] = arr[i][j + 1] = get(i, j);
        arr[i + 1][j] = arr[i + 1][j + 1] = get(i + 1, j);
        a -= 2;
      } else if (b > 1) {
        arr[i][j] = arr[i + 1][j] = get(i, j);
        arr[i][j + 1] = arr[i + 1][j + 1] = get(i, j + 1);
        b -= 2;
      } else
        return cout << "IMPOSSIBLE", 0;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << arr[i][j];
    }
    cout << endl;
  }
  return 0;
}
