import std.stdio;
import std.conv, std.array, std.algorithm, std.string;
import std.math, std.random, std.range, std.datetime;
import std.bigint;
import std.container;
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }

void main(){
	int hh = read.to!int;
	int ww = read.to!int;
	int h = read.to!int;
	int w = read.to!int;
	
	if(hh % h == 0 && ww % w == 0){
		writeln("No");
		return;
		}
	
	writeln("Yes");
	
	const long u = 10000;
	
	long[][] matrix;
	foreach(j; 0 .. hh){
		long[] row;
		foreach(i; 0 .. ww){
			long x = 0;
			if(i % w == w - 1) x += -(w - 1) * u - 1; else x += u;
			if(j % h == h - 1) x += -(h - 1) * u - 1; else x += u;
			row ~= x;
			}
		matrix ~= row;
		}
	
	debug matrix.writeln;
	foreach(row; matrix) writeln(row.map!(to!string).array.join(" "));
	
	}

/*

こんな感じ
（たとえば 11 1 5 1 の場合）

10000 10000 10000 10000 -40001; 10000 10000 10000 10000 -40001; 10000

これだと11が5でわりきれないからOK
※この場合の10000というのは、-1×2周期 よりも十分に大きいようにとる

縦も同様にやってたす


*/