#include <bits/stdc++.h>
using namespace std;
int main() {
  int a, b, c, d, n;
  cin >> a >> b >> c >> d >> n;
  int x[n];
  for (int i = 0; i < n; i++) {
    cin >> x[i];
  }
  char final[max(b, d)][a + c];
  memset(final, '.', sizeof(final));
  int start;
  if (a % 2 == 0) {
    int i = 0, j = 0;
    int cnt = 0;
    int need = x[cnt];
    char curr = 'a';
    while (cnt < n) {
      if (j < a) {
        if (i != b - 1 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == b - 1 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i != 0 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i--;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == 0 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        }
      } else {
        if (i != d - 1 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == d - 1 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i != 0 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i--;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == 0 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        }
      }
    }
  } else {
    int i = b - 1, j = 0;
    int cnt = 0;
    int need = x[cnt];
    char curr = 'a';
    while (cnt < n) {
      if (j < a) {
        if (i != 0 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i--;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == 0 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i != b - 1 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == b - 1 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        }
      } else {
        if (i != 0 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i--;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == 0 && j % 2 == 0) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i != d - 1 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            i++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        } else if (i == d - 1 && j % 2 == 1) {
          if (need > 0) {
            final[i][j] = curr;
            need--;
            j++;
          }
          if (need == 0) {
            cnt++;
            need = x[cnt];
            curr++;
            continue;
          }
        }
      }
    }
  }
  cout << "YES\n";
  for (int i = 0; i < max(b, d); i++) {
    for (int j = 0; j < a + c; j++) {
      cout << final[i][j];
    }
    cout << "\n";
  }
  return 0;
}
