#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
  os << "[";
  for (long long i = 0; i < v.size(); ++i) {
    os << v[i];
    if (i != v.size() - 1) os << ", ";
  }
  os << "]";
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, const set<T>& v) {
  os << "{";
  for (auto it : v) {
    os << it;
    if (it != *v.rbegin()) os << ", ";
  }
  os << "}";
  return os;
}
template <typename T, typename S>
ostream& operator<<(ostream& os, const map<T, S>& v) {
  os << "{";
  for (auto it : v) {
    os << it.first << " : " << it.second;
    if (it != *v.rbegin()) os << ", ";
  }
  os << "}";
  return os;
}
template <typename T, typename S>
ostream& operator<<(ostream& os, const pair<T, S>& v) {
  os << "(";
  os << v.first << ", " << v.second << ")";
  return os;
}
const long long mod = 1e9 + 7;
long long fin(long long a, vector<pair<long long, long long> >& par) {
  if (par[a].first == a)
    return a;
  else
    return fin(par[a].first, par);
}
bool uni(long long a, long long b, vector<pair<long long, long long> >& par) {
  long long o = fin(a, par);
  long long t = fin(b, par);
  if (o == t) return true;
  if (par[t].second > par[o].second) swap(o, t);
  if (par[t].second == par[o].second) par[o].second++;
  par[t].first = o;
  return false;
}
long long power(long long x, long long y, long long m) {
  if (y == 0) return 1;
  long long p = power(x, y / 2, m) % m;
  p = (p * p) % m;
  return (y % 2 == 0) ? p : (x * p) % m;
}
long long fin_par(vector<vector<long long> >& bin, long long a, long long p) {
  long long c = a;
  for (long long i = 0; i < 22; i++) {
    if ((1 << i) & p) {
      c = bin[c][i];
    }
  }
  return c;
}
long long lca(vector<vector<long long> >& bin, long long a, long long b,
              vector<long long>& d) {
  if (d[a] > d[b]) {
    swap(a, b);
  }
  long long dif = d[b] - d[a];
  long long prod = (1ll << 29);
  for (long long i = 29; i >= 0; i--) {
    if (dif & prod) {
      b = bin[b][i];
    }
    prod /= 2;
  }
  if (b == a) return a;
  prod = (1ll << 29);
  for (long long i = 29; i >= 0; i--) {
    if (bin[b][i] != bin[a][i]) {
      b = bin[b][i];
      a = bin[a][i];
    }
    prod /= 2;
  }
  return bin[a][0];
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
char b[200][200];
void solve() {
  long long n, m, k;
  cin >> n >> m >> k;
  long long mini = 0;
  long long maxi = (n * (m - (m & 1))) / 2;
  if (n & 1) mini = m / 2;
  if (k < mini || k > maxi) {
    cout << "NO"
         << "\n";
    return;
  }
  mini -= k;
  if (mini & 1) {
    cout << "NO"
         << "\n";
    return;
  } else {
    cout << "YES"
         << "\n";
    long long cnt = 0;
    for (long long i = 0; i < n; i++)
      for (long long j = 0; j < m; j++) b[i][j] = 'z';
    long long st = n & 1;
    if (st) {
      for (long long j = 0; j < m; j += 2) {
        long long c = (j / 2) & 1;
        b[0][j] = b[0][j + 1] = 'a' + c;
        cnt++;
      }
    }
    for (long long j = 0; j < m; j += 2)
      for (long long i = st; i < n; i++) {
        if (cnt >= k) break;
        long long r = i & 1;
        long long c = (j / 2) & 1;
        c ^= r;
        b[i][j] = b[i][j + 1] = 'a' + c;
        cnt++;
        if (cnt >= k) break;
      }
    for (long long i = st; i < n; i += 2) {
      for (long long j = 0; j < m; j++) {
        if (b[i][j] != 'z') continue;
        long long r = j & 1;
        long long c = (i / 2) & 1;
        c ^= r;
        b[i][j] = b[i + 1][j] = 'k' + c;
      }
    }
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) cout << b[i][j];
      cout << "\n";
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long tc;
  cin >> tc;
  while (tc--) {
    solve();
  }
}
