#include <bits/stdc++.h>
using namespace std;
char mm[102][102];
int a, b, c, d, n;
int x[30];
int main() {
  scanf("%d%d%d%d%d", &a, &b, &c, &d, &n);
  for (int i = 0; i < n; i++) scanf("%d", &x[i]);
  int s = std::max(b, d), dir = 1, i = 0, j = 0, ridx, rbound, lbound;
  if (b > d) {
    if (d % 2 == 0)
      dir = 1;
    else
      dir = 0;
  } else {
    if (b % 2 == 0)
      dir = 0;
    else
      dir = 1;
  }
  for (int i = 0; i < s; i++) {
    for (int j = 0; j < a + c; j++) mm[i][j] = '.';
  }
  for (int row = 0; row < s; row++) {
    if (b > d) {
      if (row <= d - 1) {
        if (dir == 0)
          ridx = a + c - 1, lbound = 0;
        else
          ridx = 0, rbound = a + c - 1;
      } else {
        if (dir == 0)
          ridx = a - 1, lbound = 0;
        else
          ridx = 0, rbound = a - 1;
      }
    } else {
      if (row <= b - 1) {
        if (dir == 0)
          ridx = a + c - 1, lbound = 0;
        else
          ridx = 0, rbound = a + c - 1;
      } else {
        if (dir == 0)
          ridx = a + c - 1, lbound = a;
        else
          ridx = a, rbound = a + c - 1;
      }
    }
    if (dir == 1) {
      while (ridx <= rbound) {
        while (ridx <= rbound && j < x[i]) {
          mm[row][ridx++] = 'a' + i;
          j++;
        }
        if (j >= x[i]) i++, j = 0;
      }
    } else {
      while (ridx >= lbound) {
        while (ridx >= lbound && j < x[i]) {
          mm[row][ridx--] = 'a' + i;
          j++;
        }
        if (j >= x[i]) i++, j = 0;
      }
    }
    dir = dir ^ 1;
  }
  printf("YES\n");
  for (int i = 0; i < s; i++) {
    for (int j = 0; j < a + c; j++) printf("%c", mm[i][j]);
    printf("\n");
  }
  return 0;
}
