#include <bits/stdc++.h>
using namespace std;
void bad() {
  cout << "IMPOSSIBLE" << endl;
  exit(0);
}
int n, m;
int color;
int x[100][100];
int y[100][100];
bool viz[100][100];
bool nouse[26];
int rd[] = {-1, 1, 0, 0};
int cd[] = {0, 0, -1, 1};
bool in(int r, int c) { return r >= 0 && r < n && c >= 0 && c < m; }
void lay(int r, int c, int type) {
  if (type == 0)
    x[r][c] = x[r][c + 1] = color;
  else if (type == 1)
    x[r][c] = x[r + 1][c] = color;
  else
    x[r][c] = x[r][c + 1] = x[r + 1][c] = x[r + 1][c + 1] = color;
  color++;
}
void go(int r, int c, int col) {
  if (viz[r][c]) return;
  viz[r][c] = 1;
  for (int i = 0; i < 4; i++) {
    int nr = r + rd[i];
    int nc = c + cd[i];
    if (in(nr, nc))
      if (x[nr][nc] == col)
        go(nr, nc, col);
      else {
        if (y[nr][nc] != -1) nouse[y[nr][nc]] = 1;
      }
  }
}
void fill(int r, int c, int col, int orig) {
  if (y[r][c] != -1) return;
  y[r][c] = col;
  for (int i = 0; i < 4; i++) {
    int nr = r + rd[i];
    int nc = c + cd[i];
    if (in(nr, nc))
      if (x[nr][nc] == orig) fill(nr, nc, col, orig);
  }
}
int main() {
  color = 0;
  memset(viz, 0, sizeof(viz));
  memset(y, -1, sizeof(y));
  int a, b, c;
  cin >> n >> m >> a >> b >> c;
  int swapped = 0;
  int b1 = n % 2;
  int b2 = m % 2;
  if (b1 && b2) {
    bad();
  } else if (b1 || b2) {
    if (b1) {
      swap(n, m);
      swap(b1, b2);
      swap(a, b);
      swapped = 1;
    }
    if (n / 2 > b) bad();
    for (int i = 0; i < n; i += 2) {
      lay(i, 0, 1);
      b--;
    }
  }
  for (int i = 0; i < n; i += 2)
    for (int j = b2; j < m; j += 2)
      if (c) {
        lay(i, j, 2);
        c--;
      } else if (b >= 2) {
        lay(i, j, 1);
        lay(i, j + 1, 1);
        b -= 2;
      } else if (a >= 2) {
        lay(i, j, 0);
        lay(i + 1, j, 0);
        a -= 2;
      } else
        bad();
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      if (viz[i][j]) continue;
      for (int k = 0; k < 26; k++) nouse[k] = 0;
      go(i, j, x[i][j]);
      for (int k = 0; k < 26; k++)
        if (!nouse[k]) {
          fill(i, j, k, x[i][j]);
          break;
        }
    }
  if (swapped)
    for (int i = 0; i < m; i++) {
      for (int j = 0; j < n; j++) cout << char(y[j][i] + 'a');
      cout << endl;
    }
  else
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) cout << char(y[i][j] + 'a');
      cout << endl;
    }
}
