#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int, int> pii;
typedef map<int, int> mii;
typedef set<int> si;
typedef string str;
typedef vector<int> vi;
typedef vector<vi> v2i;
typedef vector<si> vsi;
typedef vector<ll> vl;
typedef vector<vl> v2l;
typedef vector<db> vd;
typedef vector<bool> vb;
typedef vector<pii> vp;
void fastIO() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
}
void fileIO(string file) {
  freopen((file + ".in").c_str(), "r", stdin);
  freopen((file + ".out").c_str(), "w", stdout);
}
template <class T>
void debug(string s, vector<T> a) {
  cerr << "[Debug] " << s << " = ";
  for (int i = 0; i < a.size(); i++) {
    cerr << a[i];
    if (i < a.size() - 1) cerr << ", ";
  }
  cerr << '\n';
}
template <class T>
void debug(string s, T x) {
  debug(s, vector<T>({x}));
}
template <class T>
void debug(T x) {
  debug("*", x);
}
void solve() {
  int N, M, K;
  cin >> N >> M >> K;
  bool rot = false;
  if (N % 2) {
    rot = true;
    swap(N, M);
    K = M * N / 2 - K;
  }
  if (K % 2 || K > N * (M / 2))
    cout << "NO\n";
  else {
    cout << "YES\n";
    v2i ans(N, vi(M));
    for (int c = 0; c < M; c++) {
      for (int r = 0; r + 1 < N; r += 2)
        ans[r][c] = ans[r + 1][c] = (c + r / 2) % 2;
    }
    for (int c = 0; c + 1 < M; c += 2) {
      for (int r = 0; r < N; r++) {
        if (K) {
          ans[r][c] = ans[r][c + 1] = 2 + ((c / 2 + r) % 2);
          K--;
        }
      }
    }
    if (!rot) {
      for (int r = (0); r < (N); r++) {
        for (int c = (0); c < (M); c++) cout << char('a' + ans[r][c]);
        cout << '\n';
      }
    } else {
      for (int c = (0); c < (M); c++) {
        for (int r = (0); r < (N); r++) cout << char('a' + ans[r][c]);
        cout << '\n';
      }
    }
  }
}
int main() {
  fastIO();
  int T = 1;
  cin >> T;
  while (T--) solve();
}
