#include <bits/stdc++.h>

#define _overload(_1,_2,_3,name,...) name
#define _rep(i,n) _range(i,0,n)
#define _range(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload(__VA_ARGS__,_range,_rep,)(__VA_ARGS__)

#define _rrep(i,n) _rrange(i,n,0)
#define _rrange(i,a,b) for(int i=int(a)-1;i>=int(b);--i)
#define rrep(...) _overload(__VA_ARGS__,_rrange,_rrep,)(__VA_ARGS__)

#define _all(arg) begin(arg),end(arg)
#define uniq(arg) sort(_all(arg)),(arg).erase(unique(_all(arg)),end(arg))
#define getidx(ary,key) lower_bound(_all(ary),key)-begin(ary)
#define clr(a,b) memset((a),(b),sizeof(a))
#define bit(n) (1LL<<(n))
#define popcount(n) (__builtin_popcountll(n))

using namespace std;

template<class T>bool chmax(T &a, const T &b) { return (a < b) ? (a = b, 1) : 0;}
template<class T>bool chmin(T &a, const T &b) { return (b < a) ? (a = b, 1) : 0;}

using ll = long long;
using R = long double;
const R EPS = 1e-9L; // [-1000,1000]->EPS=1e-8 [-10000,10000]->EPS=1e-7
inline int sgn(const R& r) {return (r > EPS) - (r < -EPS);}
inline R sq(R x) {return sqrt(max(x, 0.0L));}

const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};

// Problem Specific Parameter:

// Description: 素集合を管理するデータ構造
// TimeComplexity: 初期化$\mathcal{O}(n)$ 更新$\mathcal{O}(\log n)$
// Verifyed: AOJ DSL_1_A

struct Union_find {
	Union_find(int n) {par.resize(n), iota(_all(par), 0);}
	int find(int x) {return (par[x] == x) ? x : par[x] = find(par[x]);}
	void unite(int a, int b) {a = find(a), b = find(b); par[a] = b;}
	bool same(int a, int b) {return find(a) == find(b);}
	vector<int> par;
};

char ans[510][510];
int hoge[510][510];


int main(void) {
	int h, w, d;
	cin >> h >> w >> d;

	Union_find uf(h * w);

	if (d % 2 == 1) {
		rep(i, h) {
			rep(j, w) {
				const int idx = i + j;
				if (idx % 2 == 1)
					ans[i][j] = 'R';
				else
					ans[i][j] = 'G';
			}
		}
	} else {
		rep(i, h)rep(j, w) hoge[i][j] = 0;

		rep(offset,d){
			for(int k = 0; d * k + offset <= h + w - 2; ++k){
				const int sum = d * k + offset;
				rep(i,h){
					const int j = sum - i;
					if(j < 0 or w <= j) continue;
					if(k%2==1) hoge[i][j]^=1;
				}
			}
		}

		rep(offset,d){
			for(int k = 0; h + offset - d * k >= -w ; ++k){
				const int sub = h + offset - d * k;
				rep(i,h){
					const int j = i - sub;
					if(j < 0 or w <= j) continue;
					if(k%2==1) hoge[i][j]^=2;
				}
			}
		}

		char color[4]={'R','G','Y','B'};
		rep(i,h)rep(j,w) ans[i][j]=color[hoge[i][j]];

		/*
		rep(i, h)rep(j, w) {
			if (ans[i][j] == '*' and i - d >= 0) {
				if (ans[i - d][j] == 'R') ans[i][j] = 'G';
				if (ans[i - d][j] == 'G') ans[i][j] = 'R';
				if (ans[i - d][j] == 'Y') ans[i][j] = 'B';
				if (ans[i - d][j] == 'B') ans[i][j] = 'Y';
			}

			if (ans[i][j] == '*' and j - d >= 0) {
				if (ans[i][j - d] == 'R') ans[i][j] = 'G';
				if (ans[i][j - d] == 'G') ans[i][j] = 'R';
				if (ans[i][j - d] == 'Y') ans[i][j] = 'B';
				if (ans[i][j - d] == 'B') ans[i][j] = 'Y';
			}

			if (ans[i][j] == '*' and i - unit >= 0 and j - unit >= 0) {
				if (ans[i - unit][j - unit] == 'R') ans[i][j] = 'Y';
				if (ans[i - unit][j - unit] == 'G') ans[i][j] = 'B';
				if (ans[i - unit][j - unit] == 'Y') ans[i][j] = 'R';
				if (ans[i - unit][j - unit] == 'B') ans[i][j] = 'G';
			}

			if (ans[i][j] == '*' and i - unit >= 0 and j + unit < w) {
				if (ans[i - unit][j + unit] == 'R') ans[i][j] = 'B';
				if (ans[i - unit][j + unit] == 'G') ans[i][j] = 'Y';
				if (ans[i - unit][j + unit] == 'Y') ans[i][j] = 'G';
				if (ans[i - unit][j + unit] == 'B') ans[i][j] = 'R';
			}

			if (ans[i][j] == '*') ans[i][j] = 'R';
		}
		*/

		/*
		rep(i, h)rep(j, w) {
			rep(a, h)rep(b, w) {
				if (abs(a - i) + abs(b - j) != d) continue;
				if (ans[i][j] == ans[a][b]) cerr << i << " " << j << endl;
			}
		}
		*/
	}

	
	rep(i, h) {
		rep(j, w) cout << ans[i][j];
		cout << endl;
	}
	

	return 0;
}

Measured memory_bytes: 2688