#include <bits/stdc++.h>
using namespace std;
const int OO = (int)1e9;
const double eps = 1e-10;
int a, b, c, d, n, x, p;
vector<char> chars;
char grid[55][110];
bool island[55][110];
void traverse(int r, bool dir) {
  if (r == max(b, d)) return;
  if (!dir) {
    for (int i = a + c - 1; i >= int(0); --i)
      if (island[r][i])
        grid[r][i] = chars[p++];
      else
        grid[r][i] = '.';
  } else {
    for (int i = 0; i < int(a + c); ++i)
      if (island[r][i])
        grid[r][i] = chars[p++];
      else
        grid[r][i] = '.';
  }
  traverse(r + 1, !dir);
}
int main() {
  ios::sync_with_stdio(false);
  cout.precision(10);
  cin >> a >> b >> c >> d;
  for (int i = 0; i < int(b); ++i)
    for (int j = 0; j < int(a); ++j) island[i][j] = 1;
  for (int i = 0; i < int(d); ++i)
    for (int j = a; j < int(a + c); ++j) island[i][j] = 1;
  cin >> n;
  for (int i = 0; i < int(n); ++i) {
    cin >> x;
    for (int j = 0; j < int(x); ++j) chars.push_back(char('a' + i));
  }
  if (d <= b) {
    if (d & 1)
      traverse(0, 0);
    else
      traverse(0, 1);
  } else {
    if (b & 1)
      traverse(0, 1);
    else
      traverse(0, 0);
  }
  cout << "YES\n";
  for (int i = 0; i < int(max(b, d)); ++i) {
    for (int j = 0; j < int(a + c); ++j) cout << grid[i][j];
    cout << '\n';
  }
  return 0;
}
