#include <iostream>
#include <math.h>
#include <fstream>
#include <stdio.h>
#define PI 3.14159265
int t[1011][1011][2],szam,vastag,n,szurke,db;
float hhattav;
void rak(float,float);
float fl(int);
int par();
using namespace std;
main()
{
    //ofstream ki("kep.pgm");
    int i,j,k,l;
    cin>>n>>szurke>>szam>>vastag;
    hhattav=(fl(n)/2)/fl(szam);
    for(i=0;i<(szam)*360*10;i++)
    {
        //cout<<(ujtav/360)*hhattav<<" ";
        rak(fl(i)/10+45,(fl(i)/360/10)*hhattav);
    }


    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(t[i][j][1]==-1)
            {
                t[i][j][0]=fl(szurke)-fl(t[i][j][0])/(fl(db)/fl(szurke))+1;
            }
        }
    }


    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(t[i][j][1]==-1)
            {
                for(k=0;k<=vastag/2;k++)
                {
                    for(l=0;l<=vastag/2;l++)
                    {
                        if(sqrt(l*l+k*k)<vastag)
                        {
                            if(t[i+k][j+l][1]!=-1 and (t[i+k][j+l][1]>sqrt(l*l+k*k) or t[i+k][j+l][1]==0))
                            {
                                t[i+k][j+l][0]=t[i][j][0];
                                t[i+k][j+l][1]=sqrt(l*l+k*k);
                            }
                            if(t[i-k+par()][j+l][1]!=-1 and (t[i-k+par()][j+l][1]>sqrt(l*l+k*k) or t[i-k+par()][j+l][1]==0))
                            {
                                t[i-k+par()][j+l][0]=t[i][j][0];
                                t[i-k+par()][j+l][1]=sqrt(l*l+k*k);
                            }
                            if(t[i+k][j-l+par()][1]!=-1 and (t[i+k][j-l+par()][1]>sqrt(l*l+k*k) or t[i+k][j-l+par()][1]==0))
                            {
                                t[i+k][j-l+par()][0]=t[i][j][0];
                                t[i+k][j-l+par()][1]=sqrt(l*l+k*k);
                            }
                            if(t[i-k+par()][j-l+par()][1]!=-1 and (t[i-k+par()][j-l+par()][1]>sqrt(l*l+k*k) or t[i-k+par()][j-l+par()][1]==0))
                            {
                                t[i-k+par()][j-l+par()][0]=t[i][j][0];
                                t[i-k+par()][j-l+par()][1]=sqrt(l*l+k*k);
                            }
                        }
                    }
                }
            }
        }
    }/*
    ki<<"P2"<<endl<<n<<" "<<n<<endl<<szurke<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            ki<<t[i][j][0]<<" ";
        }
        ki<<endl;
    }*/


    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            t[i][j][0]=szurke-t[i][j][0];
        }
    }/*
    ki<<"P2"<<endl<<n<<" "<<n<<endl<<szurke<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            ki<<t[i][j][0]<<" ";
        }
        ki<<endl;
    }*/
    cout<<"P2"<<endl<<n<<" "<<n<<endl<<szurke<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
             printf ("%d ",t[i][j][0]);
        }
         printf ("\n");
    }







}
void rak(float szog,float tav)
{
    int x,y;
    x=sin(szog*PI/180)*tav;
    y=cos(szog*PI/180)*tav;
    if(t[x+n/2][y+n/2][0]==0)
    {
        db++;
        t[x+n/2][y+n/2][0]=db;
        t[x+n/2][y+n/2][1]=-1;
    }
}
int par()
{
    if(vastag%2==0)return 1;return 0;
}
float fl(int n)
{
    return n;
}
