#include <bits/stdc++.h>
using namespace std;
int compare(const void* a, const void* b) { return (*(int*)a - *(int*)b); }
int gcd(int a, int b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a > b) return gcd(b, a % b);
  return gcd(a, b % a);
}
char t[105][105];
int main() {
  int n, m, a, b, c, i, j;
  cin >> n >> m >> a >> b >> c;
  for (i = 0; i < n + 5; i++)
    for (j = 0; j < m + 5; j++) {
      if (i >= 1 && i <= n && j >= 1 && j <= m)
        t[i][j] = '.';
      else
        t[i][j] = '#';
    }
  if ((n * m) % 2 == 1 || n * m > (2 * a + 2 * b + 4 * c)) {
    cout << "IMPOSSIBLE";
    return 0;
  }
  int run = 0;
  if (n % 2 == 1) {
    for (i = m; i > 1 && a > 0; i -= 2) {
      t[n][i] = t[n][i - 1] = run % 2 + 'a';
      a--;
      run++;
    }
  } else if (m % 2 == 1) {
    for (i = n; i > 1 && b > 0; i -= 2) {
      t[i][m] = t[i - 1][m] = run % 2 + 'b';
      b--;
      run++;
    }
  }
  int x, y;
  int r[26];
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) {
      if (t[i][j] == '.')
        if (c > 0 && t[i][j + 1] == '.' && t[i + 1][j] == '.' &&
            t[i + 1][j + 1] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i + 1][j] = t[i][j + 1] = t[i + 1][j + 1] = x + 'a';
          c--;
        } else if (b > 1 && t[i + 1][j] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i + 1][j] = x + 'a';
          b--;
        } else if (a > 1 && t[i][j + 1] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i][j + 1] = x + 'a';
          a--;
        }
      run++;
    }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) {
      if (t[i][j] == '.')
        if (c > 0 && t[i][j + 1] == '.' && t[i + 1][j] == '.' &&
            t[i + 1][j + 1] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i + 1][j] = t[i][j + 1] = t[i + 1][j + 1] = x + 'a';
          c--;
        } else if (b > 0 && t[i + 1][j] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i + 1][j] = x + 'a';
          b--;
        } else if (a > 0 && t[i][j + 1] == '.') {
          for (x = 0; x < 26; x++) r[x] = 1;
          for (x = i - 1; x <= i + 2; x++)
            for (y = j - 1; y <= j + 2; y++)
              if (t[x][y] >= 'a') r[t[x][y] - 'a'] = 0;
          for (x = 0; x < 26; x++)
            if (r[x]) break;
          t[i][j] = t[i][j + 1] = x + 'a';
          a--;
        }
      run++;
    }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++)
      if (t[i][j] == '.') {
        cout << "IMPOSSIBLE";
        return 0;
      }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) cout << t[i][j];
    cout << endl;
  }
  return 0;
}
