#include <bits/stdc++.h>
bool hh[10003];
int hash[1000][1000];
int main() {
  srand(time(NULL));
  int n, m, a, b, c, si, sj, i, j, tt;
  int N, M;
  while (scanf("%d%d%d%d%d", &n, &m, &a, &b, &c) == 5) {
    N = n;
    M = m;
    memset(hash, 0, sizeof(hash));
    if (n * m % 2 == 1 || a * 2 + b * 2 + c * 4 < n * m) {
      puts("IMPOSSIBLE");
      continue;
    }
    bool flag = true;
    int k = 1;
    if (m % 2 == 0) {
      tt = si = 1;
      if (n & 1) {
        n--;
        if (a < m / 2) flag = false;
        a -= m / 2;
        for (i = 1; i < m; i += 2) {
          memset(hh, 0, sizeof(hh));
          hh[hash[1][i - 1]] = 1;
          while (1) {
            k = rand() % 24 + 1;
            if (hh[k] == 0) break;
          }
          hash[1][i] = k;
          hash[1][i + 1] = k;
        }
        tt = si = 2;
      }
      sj = 1;
      while (c--) {
        if (si >= N || sj >= M) break;
        memset(hh, 0, sizeof(hh));
        hh[hash[si][sj - 1]] = true;
        hh[hash[si + 1][sj - 1]] = true;
        hh[hash[si - 1][sj]] = true;
        hh[hash[si - 1][sj + 1]] = true;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si][sj + 1] = k;
        hash[si + 1][sj] = k;
        hash[si + 1][sj + 1] = k;
        if (sj >= M - 1) {
          si += 2;
          sj = 1;
        } else
          sj += 2;
      }
      if (a & 1) a--;
      if (b & 1) b--;
      while (b--) {
        if (si >= N || sj > M) break;
        memset(hh, 0, sizeof(hh));
        hh[hash[si - 1][sj]] = 1;
        hh[hash[si][sj - 1]] = 1;
        hh[hash[si + 1][sj - 1]] = 1;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si + 1][sj] = k;
        if (sj >= M) {
          si += 2;
          sj = 1;
        } else
          sj++;
      }
      while (a--) {
        if (si > N) break;
        if (sj > M) {
          si++;
          sj = 1;
        }
        memset(hh, 0, sizeof(hh));
        hh[hash[si - 1][sj]] = 1;
        hh[hash[si - 1][sj + 1]] = 1;
        hh[hash[si][sj - 1]] = 1;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si][sj + 1] = k;
        if (sj >= M - 1) {
          si++;
          for (i = 1; i <= M; i++)
            if (hash[si][i] == 0) break;
          sj = i;
        } else
          sj += 2;
      }
    } else {
      tt = sj = 1;
      if (m & 1) {
        m--;
        if (b < n / 2) flag = false;
        b -= n / 2;
        for (i = 1; i < n; i += 2) {
          memset(hh, 0, sizeof(hh));
          hh[hash[i - 1][1]] = 1;
          while (1) {
            k = rand() % 24 + 1;
            if (hh[k] == 0) break;
          }
          hash[i][1] = k;
          hash[i + 1][1] = k;
        }
        tt = sj = 2;
      }
      si = 1;
      while (c--) {
        if (si >= N || sj >= M) break;
        memset(hh, 0, sizeof(hh));
        hh[hash[si][sj - 1]] = true;
        hh[hash[si + 1][sj - 1]] = true;
        hh[hash[si - 1][sj]] = true;
        hh[hash[si - 1][sj + 1]] = true;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si][sj + 1] = k;
        hash[si + 1][sj] = k;
        hash[si + 1][sj + 1] = k;
        if (sj >= M - 1) {
          si += 2;
          sj = tt;
        } else
          sj += 2;
      }
      if (a & 1) a--;
      if (b & 1) b--;
      while (b--) {
        if (si == N || sj > M) break;
        memset(hh, 0, sizeof(hh));
        hh[hash[si - 1][sj]] = 1;
        hh[hash[si][sj - 1]] = 1;
        hh[hash[si + 1][sj - 1]] = 1;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si + 1][sj] = k;
        if (sj >= M) {
          si += 2;
          sj = tt;
        } else
          sj++;
      }
      while (a--) {
        if (si > N) break;
        if (sj > M) {
          si++;
          sj = 1;
        }
        memset(hh, 0, sizeof(hh));
        hh[hash[si - 1][sj]] = 1;
        hh[hash[si - 1][sj + 1]] = 1;
        hh[hash[si][sj - 1]] = 1;
        while (1) {
          k = rand() % 24 + 1;
          if (hh[k] == 0) break;
        }
        hash[si][sj] = k;
        hash[si][sj + 1] = k;
        k++;
        if (sj >= M - 1) {
          si++;
          for (i = 1; i <= M; i++)
            if (hash[si][i] == 0) break;
          sj = i;
        } else
          sj += 2;
      }
    }
    for (i = 1; i <= N; i++) {
      for (j = 1; j <= M; j++) {
        if (hash[i][j] == 0) flag = false;
      }
    }
    if (flag == false) {
      puts("IMPOSSIBLE");
      continue;
    }
    for (i = 1; i <= N; i++) {
      for (j = 1; j <= M; j++) {
        printf("%c", hash[i][j] + 'a');
      }
      puts("");
    }
  }
  return 0;
}
