#include <bits/stdc++.h>
using namespace std;
int main(int argc, char **argv) {
  int N, M, A, B, C;
  cin >> N >> M >> A >> B >> C;
  if ((N & 1) && (M & 1)) {
    puts("IMPOSSIBLE");
    return 0;
  }
  char BB[N][M + 2];
  memset(BB, 0, sizeof(BB));
  srand(time(0));
  int d[8][2] = {0, -1, -1, 0, -1, 1, 0, 2, 1, -1, 1, 2, 2, 0, 2, 1};
  int e[6][2] = {-1, 0, 0, -1, 0, 1, 1, -1, 1, 1, 2, 0};
  int f[6][2] = {0, -1, -1, 0, 1, 0, -1, 1, 1, 1, 0, 2};
  for (int i = (0); i < (N / 2) && (C); ++i)
    for (int j = (0); j < (M / 2) && (C); ++j) {
      bool used[26];
      memset(used, 0, sizeof(used));
      for (int p = (0); p < (8); ++p) {
        int nx = 2 * i + d[p][0], ny = 2 * j + d[p][1];
        if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
        if (!BB[nx][ny]) continue;
        used[BB[nx][ny] - 'a'] = 1;
      }
      char k;
      for (k = 'a'; used[k - 'a']; ++k)
        ;
      for (int p = (0); p < (2); ++p)
        for (int q = (0); q < (2); ++q) BB[2 * i + p][2 * j + q] = k;
      C--;
    }
  if (M & 1)
    for (int i = (0); i < (N / 2) && (B); ++i)
      if (!BB[2 * i][M - 1] && !BB[2 * i + 1][M - 1]) {
        bool used[26];
        memset(used, 0, sizeof(used));
        for (int p = (0); p < (6); ++p) {
          int nx = 2 * i + e[p][0], ny = M - 1 + e[p][1];
          if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
          if (!BB[nx][ny]) continue;
          used[BB[nx][ny] - 'a'] = 1;
        }
        char k;
        for (k = 'a'; used[k - 'a']; ++k)
          ;
        BB[2 * i][M - 1] = BB[2 * i + 1][M - 1] = k;
        B--;
      }
  if (N & 1)
    for (int i = (0); i < (M / 2) && (A); ++i)
      if (!BB[N - 1][2 * i] && !BB[N - 1][2 * i + 1]) {
        bool used[26];
        memset(used, 0, sizeof(used));
        for (int p = (0); p < (6); ++p) {
          int nx = N - 1 + f[p][0], ny = 2 * i + f[p][1];
          if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
          if (!BB[nx][ny]) continue;
          used[BB[nx][ny] - 'a'] = 1;
        }
        char k;
        for (k = 'a'; used[k - 'a']; ++k)
          ;
        BB[N - 1][2 * i] = BB[N - 1][2 * i + 1] = k;
        A--;
      }
  for (int i = (0); i < (N / 2) && (B > 1); ++i)
    for (int j = (0); j < (M) && (B > 1); ++j)
      if (!BB[2 * i][j] && !BB[2 * i + 1][j]) {
        bool used[26];
        memset(used, 0, sizeof(used));
        for (int p = (0); p < (8); ++p) {
          int nx = 2 * i + d[p][0], ny = j + d[p][1];
          if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
          if (!BB[nx][ny]) continue;
          used[BB[nx][ny] - 'a'] = 1;
        }
        char k, h;
        for (k = 'a'; used[k - 'a']; ++k)
          ;
        used[k - 'a'] = 1;
        for (h = 'a'; used[h - 'a']; ++h)
          ;
        BB[2 * i][j] = BB[2 * i + 1][j] = k;
        BB[2 * i][j + 1] = BB[2 * i + 1][j + 1] = h;
        B -= 2;
      }
  for (int i = (0); i < (N) && (A > 1); ++i)
    for (int j = (0); j < (M / 2) && (A > 1); ++j)
      if (!BB[i][2 * j] && !BB[i][2 * j + 1]) {
        bool used[26];
        memset(used, 0, sizeof(used));
        for (int p = (0); p < (8); ++p) {
          int nx = i + d[p][0], ny = 2 * j + d[p][1];
          if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
          if (!BB[nx][ny]) continue;
          used[BB[nx][ny] - 'a'] = 1;
        }
        char k, h;
        for (k = 'a'; used[k - 'a']; ++k)
          ;
        used[k - 'a'] = 1;
        for (h = 'a'; used[h - 'a']; ++h)
          ;
        BB[i][2 * j] = BB[i][2 * j + 1] = k;
        BB[i + 1][2 * j] = BB[i + 1][2 * j + 1] = h;
        A -= 2;
      }
  bool v = 1;
  for (int i = (0); i < (N) && (v); ++i)
    for (int j = (0); j < (M) && (v); ++j) v = BB[i][j] > 0;
  if (!v)
    puts("IMPOSSIBLE");
  else
    for (int i = (0); i < (N); ++i) puts(BB[i]);
  return 0;
}
