#include #include #define chmin(x,y) (x) = min((x),(y)) #define chmax(x,y) (x) = max((x),(y)) #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define vec vector #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define pb push_back #define eb emplace_back using namespace std; using namespace atcoder; using ll = long long; using ld = long double; const ll mod = 998244353; using mint = modint998244353; const vector dx = {1,0,-1,0}, dy = {0,1,0,-1}; // using Graph = vector>>; using Graph = vector>; int divs_nearest(int n, int k){ assert(n <= 1e9); vector d; for(int i = 1; i * i <= n; i++){ if(n % i) continue; d.pb(i); if(i*i != n) d.pb(n/i); } sort(all(d)); auto it = upper_bound(all(d), k); --it; int res = *it; return res; } int main(){ // input int N,M,K; cin >> N >> M >> K; int W = divs_nearest(M,K); int H = M / W; if(H > K){ cout << "-1\n"; return 0; } vec ans(N,vec(N)); rep(i,N) rep(j,N){ int x = i % H, y = j % W; ans[i][j] = x * H + y + 1; } rep(i,N){ rep(j,N){ if(j) cout << " "; cout << ans[i][j]; } cout << endl; } }