#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
void Rd(ll&res){
res=0;char c;
while(c=getchar(),c<48);
do res=res*10+(c&15);
while(c=getchar(),c>47);
}
const int N=2002;
int n,k;
ll sum[N][N],line[N];
ll calc(int x,int y){
return sum[x][y]-sum[x-1][y]-sum[x][y-1]+sum[x-1][y-1];
}
void judge(int lx,int ly,int rx,int ry){
if(ly>ry)return;
ll tot=sum[rx][ry]-sum[lx-1][ry]-sum[rx][ly-1]+sum[lx-1][ly-1];
if(tot<k)return;
if(tot>=k&&tot<=2*k){
printf("%d %d %d %d\n",ly,lx,ry,rx);
exit(0);
}
for(int i=lx;i<=rx;i++){
line[i]=sum[i][ry]-sum[i-1][ry]-sum[i][ly-1]+sum[i-1][ly-1];
if(line[i]>=k){
ll cur_sum=0;
for(int j=ly;j<=ry;j++){
cur_sum+=calc(i,j);
if(cur_sum>=k&&cur_sum<=k*2){
printf("%d %d %d %d\n",ly,i,j,i);
exit(0);
}
}
}
}
ll cur_sum=0;
for(int i=lx;i<=rx;i++){
cur_sum+=line[i];
if(cur_sum>=k&&cur_sum<=k*2){
printf("%d %d %d %d\n",ly,lx,ry,i);
exit(0);
}
}
}
#define left kfsdkgfh
#define right ljlsdjgl
short height[N][N],left[N][N],right[N][N];
int main(){
cin>>k>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
Rd(sum[i][j]);
if(sum[i][j]>=k&&sum[i][j]<=k*2){
printf("%d %d %d %d\n",j,i,j,i);
return 0;
}
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+sum[i][j];
}
}
for(int i=1;i<=n;i++){
left[i][0]=0;
for(int j=1;j<=n;j++){
left[i][j]=left[i][j-1];
if(calc(i,j)>2*k)left[i][j]=j;
}
right[i][n+1]=n+1;
for(int j=n;j>=1;j--){
right[i][j]=right[i][j+1];
if(calc(i,j)>2*k)right[i][j]=j;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(calc(i,j)>2*k)continue;
if(i==1||calc(i-1,j)>2*k){
height[i][j]=1;
}else{
height[i][j]=height[i-1][j]+1;
left[i][j]=max(left[i-1][j],left[i][j]);
right[i][j]=min(right[i-1][j],right[i][j]);
}
judge(i-height[i][j]+1,left[i][j]+1,i,right[i][j]-1);
}
}
printf("NIE\n");
return 0;
}