#include <bits/stdc++.h>
using namespace std;
char s[101][101];
void output(int n, int m) {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cout << s[i][j];
    }
    cout << endl;
  }
}
void check(int n, int m, int a, int b, int c) {
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (s[i][j] < 'a' || s[i][j] > 'z') {
        cout << "error at " << n << ' ' << m << ' ' << a << ' ' << b << ' ' << c
             << endl;
        exit(0);
      }
    }
  }
}
bool solve(int n, int m, int a, int b, int c) {
  a -= a % 2;
  b -= b % 2;
  if (n * m > 2 * a + 2 * b + 4 * c) {
    return false;
  }
  for (int i = 0; i < n; i += 2) {
    for (int j = 0; j < m; j += 2) {
      if (c > 0) {
        int v[256];
        memset(v, 0, sizeof(v));
        if (i > 0) {
          v[s[i - 1][j]]++;
        }
        if (i > 0 && j + 1 < m) {
          v[s[i - 1][j + 1]]++;
        }
        if (j > 0) {
          v[s[i][j - 1]]++;
        }
        if (i + 1 < n && j > 0) {
          v[s[i + 1][j - 1]]++;
        }
        if (i + 2 < n) {
          v[s[i + 2][j]]++;
        }
        if (i + 2 < n && j + 1 < m) {
          v[s[i + 2][j + 1]]++;
        }
        if (j + 2 < m) {
          v[s[i][j + 2]]++;
        }
        if (i + 1 < n && j + 2 < m) {
          v[s[i + 1][j + 2]]++;
        }
        char t;
        for (t = 'a'; t <= 'z'; ++t) {
          if (v[t] == 0) {
            break;
          }
        }
        s[i][j] = t;
        s[i + 1][j] = t;
        s[i][j + 1] = t;
        s[i + 1][j + 1] = t;
        --c;
      } else if (a > 0) {
        int v[256];
        memset(v, 0, sizeof(v));
        if (i > 0) {
          v[s[i - 1][j]]++;
        }
        if (i > 0 && j + 1 < m) {
          v[s[i - 1][j + 1]]++;
        }
        if (j > 0) {
          v[s[i][j - 1]]++;
        }
        if (i + 1 < n && j > 0) {
          v[s[i + 1][j - 1]]++;
        }
        if (i + 2 < n) {
          v[s[i + 2][j]]++;
        }
        if (i + 2 < n && j + 1 < m) {
          v[s[i + 2][j + 1]]++;
        }
        if (j + 2 < m) {
          v[s[i][j + 2]]++;
        }
        if (i + 1 < n && j + 2 < m) {
          v[s[i + 1][j + 2]]++;
        }
        int ind = 0;
        char p[2];
        for (char t = 'a'; t <= 'z' && ind < 2; ++t) {
          if (v[t] == 0) {
            p[ind++] = t;
          }
        }
        s[i][j] = p[0];
        s[i][j + 1] = p[0];
        s[i + 1][j] = p[1];
        s[i + 1][j + 1] = p[1];
        a -= 2;
      } else if (b > 0) {
        int v[256];
        memset(v, 0, sizeof(v));
        if (i > 0) {
          v[s[i - 1][j]]++;
        }
        if (i > 0 && j + 1 < m) {
          v[s[i - 1][j + 1]]++;
        }
        if (j > 0) {
          v[s[i][j - 1]]++;
        }
        if (i + 1 < n && j > 0) {
          v[s[i + 1][j - 1]]++;
        }
        if (i + 2 < n) {
          v[s[i + 2][j]]++;
        }
        if (i + 2 < n && j + 1 < m) {
          v[s[i + 2][j + 1]]++;
        }
        if (j + 2 < m) {
          v[s[i][j + 2]]++;
        }
        if (i + 1 < n && j + 2 < m) {
          v[s[i + 1][j + 2]]++;
        }
        int ind = 0;
        char p[2];
        for (char t = 'a'; t <= 'z' && ind < 2; ++t) {
          if (v[t] == 0) {
            p[ind++] = t;
          }
        }
        s[i][j] = p[0];
        s[i + 1][j] = p[0];
        s[i][j + 1] = p[1];
        s[i + 1][j + 1] = p[1];
        b -= 2;
      }
    }
  }
  return true;
}
int go(int n, int m, int a, int b, int c) {
  if (n % 2 + m % 2 == 2) {
    cout << "IMPOSSIBLE" << endl;
    return 1;
  }
  if (m % 2) {
    if (b < n / 2) {
      cout << "IMPOSSIBLE" << endl;
      return 1;
    }
    if (!solve(n, m - 1, a, b - n / 2, c)) {
      cout << "IMPOSSIBLE" << endl;
      return 1;
    }
    int j = m - 1;
    for (int i = 0; i < n; i += 2) {
      int v[256];
      memset(v, 0, sizeof(v));
      if (i > 0) {
        v[s[i - 1][j]]++;
      }
      if (j > 0) {
        v[s[i][j - 1]]++;
      }
      if (i + 1 < n && j > 0) {
        v[s[i + 1][j - 1]]++;
      }
      char t;
      for (t = 'a'; t <= 'z'; ++t) {
        if (v[t] == 0) {
          break;
        }
      }
      s[i][m - 1] = t;
      s[i + 1][m - 1] = t;
    }
    output(n, m);
    return 0;
  }
  if (n % 2) {
    if (a < m / 2) {
      cout << "IMPOSSIBLE" << endl;
      return 1;
    }
    if (!solve(n - 1, m, a - m / 2, b, c)) {
      cout << "IMPOSSIBLE" << endl;
      return 1;
    }
    int i = n - 1;
    for (int j = 0; j < m; j += 2) {
      int v[256];
      memset(v, 0, sizeof(v));
      if (j > 0) {
        v[s[i][j - 1]]++;
      }
      if (i > 0) {
        v[s[i - 1][j]]++;
      }
      if (i > 0 && j + 1 < m) {
        v[s[i - 1][j + 1]]++;
      }
      char t;
      for (t = 'a'; t <= 'z'; ++t) {
        if (v[t] == 0) {
          break;
        }
      }
      s[n - 1][j] = t;
      s[n - 1][j + 1] = t;
    }
    output(n, m);
    return 0;
  }
  if (solve(n, m, a, b, c)) {
    output(n, m);
  } else {
    cout << "IMPOSSIBLE" << endl;
  }
  return 0;
}
int main() {
  int n, m, a, b, c;
  cin >> n >> m >> a >> b >> c;
  go(n, m, a, b, c);
  return 0;
}
