#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using VI = vector<int>;
using VL = vector<long long>;
using VVI = vector<VI>;
using VVL = vector<VL>;
using MII = map<int, int>;
using MIVI = map<int, VI>;
using MLL = map<LL, LL>;
int READ_INT() {
  int temp;
  cin >> temp;
  return temp;
}
LL READ_LONG() {
  LL temp;
  cin >> temp;
  return temp;
}
string READ_STRING() {
  string temp;
  cin >> temp;
  return temp;
}
const int MOD = int(1e9) + 7;
const int INF = 1e9 + 5;
const double PI = acos(-1.0);
const double EPS = 1e-9;
int main() {
  ios::sync_with_stdio(false);
  VI X;
  int A, B, C, D, N;
  cin >> A >> B >> C >> D >> N;
  for (int i = 0; i < N; ++i) X.push_back(READ_INT());
  char grid[105][105];
  string parties = "abcdefghijklmnopqrstuvwxyz";
  int cur_ind = 0, cur_val = X[cur_ind];
  cout << "YES\n";
  if (B >= D) {
    int r = 0, c, d;
    if (D % 2) {
      c = A + C - 1;
      d = -1;
    } else {
      c = 0;
      d = 1;
    }
    for (int i = 0; i < B; ++i) {
      for (int j = 0; j < A + C; ++j) {
        if (r >= D && c >= A) {
          grid[r][c] = '.';
        } else {
          grid[r][c] = parties[cur_ind];
          cur_val--;
          if (cur_val == 0) {
            cur_ind++;
            cur_val = X[cur_ind];
          }
        }
        c += d;
      }
      r++;
      d = d * -1;
      if (c < 0) c = 0;
      if (c >= A + C) c = A + C - 1;
    }
  } else {
    int r = 0, c, d;
    if (B % 2 == 0) {
      c = A + C - 1;
      d = -1;
    } else {
      c = 0;
      d = 1;
    }
    for (int i = 0; i < D; ++i) {
      for (int j = 0; j < A + C; ++j) {
        if (r >= B && c < A) {
          grid[r][c] = '.';
        } else {
          grid[r][c] = parties[cur_ind];
          cur_val--;
          if (cur_val == 0) {
            cur_ind++;
            cur_val = X[cur_ind];
          }
        }
        c += d;
      }
      r++;
      d = d * -1;
      if (c < 0) c = 0;
      if (c >= A + C) c = A + C - 1;
    }
  }
  for (int i = 0; i < max(B, D); ++i) {
    for (int j = 0; j < A + C; ++j) {
      cout << grid[i][j];
    }
    cout << "\n";
  }
  return 0;
}
