Problem:
Score : 700 points

Problem Statement

You are given four integers: H, W, h and w (1 ≤ h ≤ H, 1 ≤ w ≤ W).
Determine whether there exists a matrix such that all of the following conditions are held, and construct one such matrix if the answer is positive:

The matrix has H rows and W columns.

Each element of the matrix is an integer between -10^9 and 10^9 (inclusive).

The sum of all the elements of the matrix is positive.

The sum of all the elements within every subrectangle with h rows and w columns in the matrix is negative.

Constraints

1 ≤ h ≤ H ≤ 500

1 ≤ w ≤ W ≤ 500

Input

Input is given from Standard Input in the following format:

H W h w

Output

If there does not exist a matrix that satisfies all of the conditions, print No.

Otherwise, print Yes in the first line, and print a matrix in the subsequent lines in the following format:

a_{11} ... a_{1W}
:
a_{H1} ... a_{HW}

Here, a_{ij} represents the (i,\ j) element of the matrix.

Sample Input 1

3 3 2 2

Sample Output 1

Yes
1 1 1
1 -4 1
1 1 1

The sum of all the elements of this matrix is 4, which is positive.
Also, in this matrix, there are four subrectangles with 2 rows and 2 columns as shown below. For each of them, the sum of all the elements inside is -1, which is negative.

Sample Input 2

2 4 1 2

Sample Output 2

No

Sample Input 3

3 4 2 3

Sample Output 3

Yes
2 -5 8 7
3 -5 -4 -5
2 1 -1 7

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <iostream>
#include <string.h>
#include <set>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <string>
using namespace std;

typedef double LD;
typedef long long LL;
typedef pair<int, int> PII;
#define MP make_pair
#define PB push_back
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define RFOR(i,b,a) for(int i = (b) - 1; i >= (a); --i)
#define REP(i, t) FOR(i,0,t)
#define ALL(a) a.begin(), a.end()
#define SZ(a) (int)((a).size())

const LL MOD = 1000000007;
const int INF = 1000000007;
const LL LINF = 1LL * INF * INF;
const int MAXN = 507;
const LD EPS = 1e-7;

const int MAGIC = 1000;

int A[MAXN][MAXN];

int main()
{
	ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	//freopen("In.txt", "r", stdin);
	int n, m, h, w;
	cin >> n >> m >> h >> w;
	if (n % h == 0 && m % w == 0)
	{
		cout << "No";
		return 0;
	}
	int n1 = n / h * h, m1 = m / w * w, cnt = 0;
	LL s = 0;
	FOR(i, 1, n + 1)
		FOR(j, 1, m + 1)
	{
		if (i > n1 || j > m1)
		{
			++cnt;
			continue;
		}
		if (i % h == 0 && j % w == 0)
			A[i][j] = - (h * w - 1) * MAGIC - 1;
		else
			A[i][j] = MAGIC;
		s -= A[i][j];
	}
	++s;
	FOR(i, 1, n + 1)
		FOR(j, 1, m + 1)
	{
		if (i > n1 || j > m1)
		{
			A[i][j] = s / cnt;
			s -= A[i][j];
			--cnt;
		}
	}
	cout << "Yes\n";
	FOR(i, 1, n + 1)
	{
		FOR(j, 1, m + 1)
			cout << A[i][j] << ' ';
		cout << '\n';
	}
	//cout << endl; system("pause");
	return 0;
}