#include <bits/stdc++.h>
long long int mod = 1000000000 + 7;
long long int inf = (long long int)(5e18);
using namespace std;
mt19937 unlucko(chrono::steady_clock::now().time_since_epoch().count());
char ans[100][100];
char genchar(int i, int j) {
  bool ch[4]{};
  if (i && ans[i - 1][j] <= 'y') {
    ch[ans[i - 1][j] - 'a'] = true;
  }
  if (j && ans[i][j - 1] != 'z') {
    ch[ans[i][j - 1] - 'a'] = true;
  }
  if (i && ans[i - 1][j + 1] <= 'y') {
    ch[ans[i - 1][j + 1] - 'a'] = true;
  }
  if (!ch[0]) return 'a';
  if (!ch[1]) return 'b';
  if (!ch[2]) return 'c';
  if (!ch[3]) return 'd';
}
char supergenchar(int i, int j) {
  bool ch[5]{};
  if (i && ans[i - 1][j] <= 'y') {
    ch[ans[i - 1][j] - 'a'] = true;
  }
  if (j && ans[i][j - 1] <= 'y') {
    ch[ans[i][j - 1] - 'a'] = true;
  }
  if (j && ans[i + 1][j - 1] <= 'y') {
    ch[ans[i + 1][j - 1] - 'a'] = true;
  }
  if (i && ans[i - 1][j + 1] <= 'y') {
    ch[ans[i - 1][j + 1] - 'a'] = true;
  }
  if (!ch[0]) return 'a';
  if (!ch[1]) return 'b';
  if (!ch[2]) return 'c';
  if (!ch[3]) return 'd';
  if (!ch[4]) return 'e';
}
char megagenchar(int i, int j) {
  bool ch[4]{};
  if (i && ans[i - 1][j] <= 'y') {
    ch[ans[i - 1][j] - 'a'] = true;
  }
  if (j && ans[i][j - 1] <= 'y') {
    ch[ans[i][j - 1] - 'a'] = true;
  }
  if (j && ans[i + 1][j - 1] <= 'y') {
    ch[ans[i + 1][j - 1] - 'a'] = true;
  }
  if (!ch[0]) return 'a';
  if (!ch[1]) return 'b';
  if (!ch[2]) return 'c';
  if (!ch[3]) return 'd';
}
int main() {
  iostream::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m, a, b, c;
  cin >> n >> m >> a >> b >> c;
  if (n * m % 2) {
    cout << "IMPOSSIBLE\n";
    return 0;
  }
  int ca = 0, cb = 0;
  int sx = 0, sy = 0;
  if (n % 2) {
    if (m / 2 > a) {
      cout << "IMPOSSIBLE\n";
      return 0;
    }
    for (int i = 0; i < m; i += 2) {
      if ((i / 2) & 1) {
        ans[0][i] = 'z';
        ans[0][i + 1] = 'z';
      } else {
        ans[0][i] = 'y';
        ans[0][i + 1] = 'y';
      }
    }
    a -= m / 2;
    sx = 1;
  } else if (m % 2) {
    if (n / 2 > b) {
      cout << "IMPOSSIBLE\n";
      return 0;
    }
    for (int i = 0; i < n; i += 2) {
      if ((i / 2) & 1) {
        ans[i][0] = 'z';
        ans[i + 1][0] = 'z';
      } else {
        ans[i][0] = 'y';
        ans[i + 1][0] = 'y';
      }
    }
    b -= n / 2;
    sy = 1;
  }
  ca = a / 2;
  cb = b / 2;
  if ((cb + ca + c) * 4 < (n - sx) * (m - sy)) {
    cout << "IMPOSSIBLE\n";
    return 0;
  }
  for (int i = sx; i < n; i += 2) {
    for (int j = sy; j < m; j += 2) {
      if (ca) {
        char c = genchar(i, j);
        ans[i][j] = c;
        ans[i][j + 1] = c;
        c = genchar(i + 1, j);
        ans[i + 1][j] = c;
        ans[i + 1][j + 1] = c;
        ca--;
      } else if (cb) {
        char c = megagenchar(i, j);
        ans[i][j] = c;
        ans[i + 1][j] = c;
        c = megagenchar(i, j + 1);
        ans[i][j + 1] = c;
        ans[i + 1][j + 1] = c;
        cb--;
      } else if (c) {
        char c = supergenchar(i, j);
        ans[i][j] = c;
        ans[i][j + 1] = c;
        ans[i + 1][j] = c;
        ans[i + 1][j + 1] = c;
        c--;
      } else {
        cout << "WUT\n";
        return 0;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << ans[i][j];
    }
    cout << '\n';
  }
}
