#include <bits/stdc++.h>
using namespace std;
char s[500][500];
int n, m, a, b, c, currn, currm;
void givea();
void giveb();
void givec();
int assign1();
int assign2();
int assign3();
void print3() {
  for (int i = 1; i < n; i++) {
    for (int j = 1; j <= m; j++) {
      printf("%c", s[i][j]);
    }
    printf("\n");
  }
}
void print() {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      printf("%c", s[i][j]);
    }
    printf("\n");
  }
}
void print1() {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      printf("%c", s[j][i]);
    }
    printf("\n");
  }
}
void assign() {
  int flag;
  if (n % 2) {
    flag = assign1();
    if (flag) print();
  } else if (m % 2) {
    flag = assign2();
    if (flag) print1();
  } else {
    flag = assign3();
    if (flag) print3();
  }
}
int main() {
  int i, j, k, l, test, t = 1;
  while (scanf("%d %d", &n, &m) == 2) {
    scanf("%d %d %d", &a, &b, &c);
    memset(s, 0, sizeof(s));
    currn = currm = 1;
    if (n % 2 && m % 2) {
      printf("IMPOSSIBLE\n");
      continue;
    }
    assign();
    printf("\n");
  }
  return 0;
}
void givea() {
  char ch = 'a';
  int i, j;
  int fl = 0;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (s[i][j] == 0) {
        currn = i;
        currm = j;
        fl = 1;
        break;
      }
    }
    if (fl) break;
  }
  while (1) {
    if (s[currn - 1][currm] == ch)
      ch++;
    else if (s[currn - 1][currm + 1] == ch)
      ch++;
    else if (s[currn][currm - 1] == ch)
      ch++;
    else
      break;
  }
  for (i = currn; i <= currn; i++) {
    for (j = currm; j <= currm + 1; j++) {
      s[i][j] = ch;
    }
  }
  if (currm >= m - 1) {
    currn++;
    currm = 1;
  } else
    currm += 2;
}
void giveb() {
  char ch = 'a';
  int i, j;
  int fl = 0;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (s[i][j] == 0) {
        currn = i;
        currm = j;
        fl = 1;
        break;
      }
    }
    if (fl) break;
  }
  while (1) {
    if (s[currn - 1][currm] == ch)
      ch++;
    else if (s[currn + 1][currm - 1] == ch)
      ch++;
    else if (s[currn][currm - 1] == ch)
      ch++;
    else
      break;
  }
  for (i = currn; i <= currn + 1; i++) {
    for (j = currm; j <= currm; j++) {
      s[i][j] = ch;
    }
  }
  if (currm >= m) {
    currn += 2;
    currm = 1;
  } else
    currm++;
}
int assign1() {
  int reqa = m / 2;
  int i, j;
  if (a < reqa) {
    printf("IMPOSSIBLE\n");
    return 0;
  }
  a -= reqa;
  int now = (n - 1) * m;
  int cana, canb, canc;
  cana = a;
  if (cana % 2) cana--;
  cana *= 2;
  canb = b;
  if (canb % 2) canb--;
  canb *= 2;
  canc = c;
  canc *= 4;
  if (cana + canb + canc < now) {
    printf("IMPOSSIBLE\n");
    return 0;
  }
  canb /= 2;
  canc /= 4;
  while (canc--) {
    if (!now) break;
    givec();
    now -= 4;
  }
  while (canb--) {
    if (!now) break;
    giveb();
    now -= 2;
  }
  now += m;
  a += reqa;
  while (a--) {
    if (!now) break;
    givea();
    now -= 2;
  }
  return 1;
}
int assign2() {
  swap(n, m);
  swap(a, b);
  if (!assign1()) return 0;
  swap(n, m);
  return 1;
}
int assign3() {
  n++;
  a += (m / 2);
  if (!assign1()) return 0;
  return 1;
}
void givec() {
  char ch = 'a';
  int i, j;
  int fl = 0;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (s[i][j] == 0) {
        currn = i;
        currm = j;
        fl = 1;
        break;
      }
    }
    if (fl) break;
  }
  while (1) {
    if (s[currn - 1][currm] == ch)
      ch++;
    else if (s[currn + 1][currm - 1] == ch)
      ch++;
    else if (s[currn][currm - 1] == ch)
      ch++;
    if (s[currn - 1][currm + 1] == ch)
      ch++;
    else
      break;
  }
  for (i = currn; i <= currn + 1; i++) {
    for (j = currm; j <= currm + 1; j++) {
      s[i][j] = ch;
    }
  }
  if (currm >= m - 1) {
    currn += 2;
    currm = 1;
  } else
    currm += 2;
}
