fun main(args: Array<String>) {
    val (H, W, h, w) = readLine()!!.split(" ").map {it.toInt()}

    if (H % h == 0 && W % w == 0) {
        println("No")
        return
    }

    val A: Array<Array<Long>>

    if (H % h == 0) {
        val B = func(W, H, w, h)
        A = Array(H) { i -> Array(W)  { j-> B[j][i] } }
    } else {
        A = func(H, W, h, w)
    }

    println("Yes")
    for (r in A) {
        println(r.joinToString(" "))
    }
}

fun func(W: Int, H: Int, w: Int, h: Int): Array<Array<Long>> {
    val V = 1e6.toLong()
    val A = Array(W) { Array(H) { -V - 1L } }

    for (i in 0 until W step w) {
        for (j in 0 until H) {
            A[i][j] = V * (w - 1)
        }
    }

    return A
}
