#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << "{" << p.first << "," << p.second << "}";
  return os;
}
const int N = 150 + 5;
const int oo = 1e9 + 7;
char ans[N][N];
int x[N];
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int a, b, c, d, n;
  cin >> a >> b >> c >> d >> n;
  for (int i = 0; i < n; i++) cin >> x[i];
  int ii = 0;
  vector<pair<int, int> > z;
  if (a % 2) {
    for (int i = 0; i < a; i += 2) {
      for (int j = b - 1; j >= 0; j--) z.push_back({j, i});
      if (i + 1 < a)
        for (int j = 0; j < b; j++) z.push_back({j, i + 1});
    }
  } else {
    for (int i = 0; i < a; i += 2) {
      for (int j = 0; j < b; j++) z.push_back({j, i});
      if (i + 1 < a)
        for (int j = b - 1; j >= 0; j--) z.push_back({j, i + 1});
    }
  }
  for (int i = 0; i < c; i += 2) {
    for (int j = 0; j < d; j++) z.push_back({j, a + i});
    if (i + 1 < c)
      for (int j = d - 1; j >= 0; j--) z.push_back({j, a + i + 1});
  }
  assert(z.size() == a * b + c * d);
  for (int i = 0; i < max(b, d); i++) {
    for (int j = 0; j < a + c; j++) ans[i][j] = '.';
    ans[i][a + c] = 0;
  }
  for (pair<int, int> y : z) {
    ans[y.first][y.second] = ii + 'a';
    x[ii]--;
    if (x[ii] == 0) ii++;
  }
  cout << "YES\n";
  for (int i = 0; i < max(b, d); i++) {
    cout << ans[i] << "\n";
  }
}
