#include <bits/stdc++.h>
using namespace std;
char p[100][100];
int r[26];
int a, b, c, d, n;
int current_p;
int current_in_p;
char next_c() {
  current_in_p++;
  if (current_in_p == r[current_p] + 1) {
    current_p++;
    current_in_p = 1;
  }
  return 'a' + current_p;
}
void fill_bd() {
  current_p = 0;
  current_in_p = 0;
  int end;
  for (int i = b - 1; i >= 0; i--) {
    if (i >= d) {
      end = a;
    } else {
      end = a + c;
    }
    int pair = i + 1;
    if (b % 2) {
      pair++;
    }
    if ((b - d) % 2) {
      pair++;
    }
    if (pair % 2 == 0) {
      for (int j = 0; j < end; j++) {
        p[i][j] = next_c();
      }
    } else {
      for (int j = end - 1; j >= 0; j--) {
        p[i][j] = next_c();
      }
    }
  }
}
void fill_db() {
  current_p = 0;
  current_in_p = 0;
  int start;
  for (int i = d - 1; i >= 0; i--) {
    if (i >= b) {
      start = a;
    } else {
      start = 0;
    }
    int pair = i + 1;
    if (d % 2 == 0) {
      pair++;
    }
    if ((d - b) % 2) {
      pair++;
    }
    if (pair % 2 == 0) {
      for (int j = start; j < a + c; j++) {
        p[i][j] = next_c();
      }
    } else {
      for (int j = a + c - 1; j >= start; j--) {
        p[i][j] = next_c();
      }
    }
  }
}
int main(int argc, char* const argv[]) {
  cin >> a >> b >> c >> d >> n;
  for (int i = 0; i < n; i++) {
    cin >> r[i];
  }
  for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
      p[i][j] = '.';
    }
  }
  if (b > d) {
    fill_bd();
  } else {
    fill_db();
  }
  cout << "YES";
  for (int i = 0; i < max(b, d); i++) {
    cout << endl;
    for (int j = 0; j < a + c; j++) {
      cout << p[i][j];
    }
  }
  return 0;
}
