#include <bits/stdc++.h>
int64_t n, m, kh, kv;
struct grid {
  char a[101][101];
  grid() {}
  void init() {
    std::memset(a, 0, sizeof(a));
    kv = n * m / 2 - kh;
  }
  bool check() {
    int64_t _kh = kh, _kv = kv;
    if (n & 1) _kh -= m / 2;
    if (m & 1) _kv -= n / 2;
    return _kv >= 0 && _kh >= 0 && !(_kv & 1) && !(_kh & 1);
  }
  void put_h(int i, int j, char c) {
    a[i][j] = a[i][j + 1] = c;
    --kh;
  }
  void put_v(int i, int j, char c) {
    a[i][j] = a[i + 1][j] = c;
    --kv;
  }
  void put_row(int i, char a, char b) {
    for (int j = 0; kh && j < m; j += 2) put_h(i, j, (j % 4 ? a : b));
  }
  void put_col(int j, char a, char b) {
    for (int i = 0; kv && i < n; i += 2) put_v(i, j, (i % 4 ? a : b));
  }
  void print() {
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j)
        std::cout << (int(a[i][j]) < 97 ? '-' : a[i][j]);
      std::cout << '\n';
    }
  }
};
grid g;
bool solve() {
  g.init();
  if (!g.check()) return 0;
  if (n & 1) g.put_row(n - 1, 'a', 'b');
  if (m & 1) g.put_col(m - 1, 'a', 'b');
  for (int i = 0; i < n - (n & 1); i += 2) {
    for (int j = 0; j < m - (m & 1); j += 2) {
      if (kh) {
        g.put_h(i, j, ((i + j) % 4 ? 'c' : 'd'));
        g.put_h(i + 1, j, ((i + j) % 4 ? 'e' : 'f'));
      } else {
        g.put_v(i, j, ((i + j) % 4 ? 'g' : 'h'));
        g.put_v(i, j + 1, ((i + j) % 4 ? 'i' : 'j'));
      }
    }
  }
  return 1;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  std::cout.tie(nullptr);
  int t;
  std::cin >> t;
  while (t--) {
    std::cin >> n >> m >> kh;
    if (!solve())
      std::cout << "NO\n";
    else {
      std::cout << "YES\n";
      g.print();
    }
  }
  return 0;
}
