#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m;
int mas[100][100];
int col[50];
pair<int, int> next239[100][100];
int good(int x, int y) {
  return x < n && x >= 0 && y < m && y >= 0 && mas[x][y];
}
int main() {
  int a, b, c, d;
  int nn;
  cin >> b >> a >> d >> c;
  for (int i = 0; i < (a); i++)
    for (int j = 0; j < (b); j++) mas[i][j] = 1;
  for (int i = 0; i < (c); i++)
    for (int j = 0; j < (d); j++) mas[i][j + b] = 1;
  cin >> nn;
  for (int i = 0; i < (nn); i++) cin >> col[i];
  n = max(a, c);
  m = b + d;
  int cx = 0, cy = 0;
  for (int i = 0; i < (n); i++)
    for (int j = 0; j < (m); j++)
      if (mas[i][j] == 1) {
        if ((min(a, c) % 2 == 0) ^ (a < c)) {
          if (i % 2 == 0) {
            if (good(i, j + 1))
              next239[i][j] = make_pair(i, j + 1);
            else
              next239[i][j] = make_pair(i + 1, j);
          } else {
            if (good(i, j - 1))
              next239[i][j] = make_pair(i, j - 1);
            else
              next239[i][j] = make_pair(i + 1, j);
          }
        } else {
          cy = m - 1;
          if (i % 2 == 1) {
            if (good(i, j + 1))
              next239[i][j] = make_pair(i, j + 1);
            else
              next239[i][j] = make_pair(i + 1, j);
          } else {
            if (good(i, j - 1))
              next239[i][j] = make_pair(i, j - 1);
            else
              next239[i][j] = make_pair(i + 1, j);
          }
        }
      }
  char ans[100][100];
  memset(ans, 0, sizeof(ans));
  for (int i = 0; i < (nn); i++) {
    for (int j = 0; j < (col[i]); j++) {
      ans[cx][cy] = 97 + i;
      pair<int, int> tmp = next239[cx][cy];
      cx = tmp.first;
      cy = tmp.second;
    }
  }
  cout << "YES" << endl;
  for (int i = 0; i < (n); i++) {
    for (int j = 0; j < (m); j++)
      if (mas[i][j])
        cout << ans[i][j];
      else
        cout << '.';
    cout << endl;
  }
  return 0;
}
