#include <bits/stdc++.h>
#pragma GCC optimize("trapv")
#pragma GCC optimize("Ofast")
#pragma GCC optimization("unroll-loops")
#pragma GCC target("avx2")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long MOD = 1000000007;
const long long MOD2 = 998244353;
mt19937 rng(
    (long long)std::chrono::steady_clock::now().time_since_epoch().count());
const long long MAXN = 1e5 + 10;
void solve(long long test_case) {
  long long n, m, a, b, c;
  cin >> n >> m >> a >> b >> c;
  string s[n];
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      s[i] += "?";
    }
  }
  if (n % 2 == 1 && m % 2 == 1) {
    cout << "IMPOSSIBLE\n";
    return;
  }
  long long used_a = 0, used_b = 0, used_c = 0;
  if (n % 2 == 1) {
    for (long long i = 0; i < m; i += 2) {
      s[n - 1][i] = (i % 4 == 0 ? 'a' : 'b');
      s[n - 1][i + 1] = s[n - 1][i];
      used_a++;
    }
  }
  if (m % 2 == 1) {
    for (long long i = 0; i < n; i += 2) {
      s[i][m - 1] = (i % 4 == 0 ? 'a' : 'b');
      s[i + 1][m - 1] = s[i][m - 1];
      used_b++;
    }
  }
  a -= used_a;
  b -= used_b;
  if (a < 0 || b < 0) {
    cout << "IMPOSSIBLE\n";
    return;
  }
  for (long long i = 0; i < (n / 2) * 2; i += 2) {
    for (long long j = 0; j < (m / 2) * 2; j += 2) {
      char use;
      if ((i + j) % 4 == 0)
        use = 'c';
      else
        use = 'e';
      if (c > 0) {
        s[i][j] = use;
        s[i][j + 1] = use;
        s[i + 1][j] = use;
        s[i + 1][j + 1] = use;
        c--;
      } else if (a > 1) {
        s[i][j] = use;
        s[i][j + 1] = use;
        s[i + 1][j] = use + 1;
        s[i + 1][j + 1] = use + 1;
        a -= 2;
      } else if (b > 1) {
        s[i][j] = use;
        s[i][j + 1] = use + 1;
        s[i + 1][j] = use;
        s[i + 1][j + 1] = use + 1;
        b -= 2;
      } else {
        cout << "IMPOSSIBLE\n";
        return;
      }
    }
  }
  for (long long i = 0; i < n; i++) {
    cout << s[i] << "\n";
  }
}
signed main() {
  time_t t = clock();
  srand(time(NULL));
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long T = 1;
  long long test_case = 1;
  while (T--) {
    solve(test_case);
    test_case++;
  }
  cerr << "Program terminated successfully\n";
  t = clock() - t;
  cerr << "Time used: " << fixed << setprecision(3)
       << (long double)(t * 1.0 / CLOCKS_PER_SEC) << " seconds\n";
}
