#include struct coada{int l;int c;}; int x, y, n, l,nr,s; coada v[2600], C[2600]; int dir[2600], a[60][60]; int dx[]={0,-1,0,1,0}; int dy[]={0,0,1,0,-1}; void citire() { int i; scanf("%d%d%d%d", &x, &y, &n, &l); for(i=1;i<=l;++i) scanf("%d", &dir[i]); } void afisare() { printf("%d\n", nr); printf("%d\n", s+nr/2-1); } void fill(int linie, int coloana) { int ic=1, sf=1, k,l9,c9; coada X; C[ic].l=linie; C[ic].c=coloana; a[linie][coloana]=2; s=1; while(ic<=sf) { X=C[ic++]; for(k=1;k<=4;++k) { l9=X.l+dx[k]; c9=X.c+dy[k]; if(!a[l9][c9]) { C[++sf].l=l9; C[sf].c=c9; s++; a[l9][c9]=2; } } } } int verif(int x, int y){ int i1,i2,j1,j2; if(a[x][y]!=0) return 0; i1=x; while(i1>0&&a[i1][y]==0) i1--; if(i1==0) return 0; i2=x; while(i2<=n&&a[i2][y]==0) i2++; if(i2==n+1) return 0; j1=y; while(j1>0&&a[x][j1]==0) j1--; if(j1==0) return 0; j2=y; while(j2<=n&&a[x][j2]==0) j2++; if(j2==n+1) return 0; return 1; } void rezolva_problema() { int i, l9, c9,j; citire(); v[0].l=x; v[0].c=y; //cerinta I for(i=1;i<=l;++i) { l9=v[i-1].l+dx[dir[i]]; c9=v[i-1].c+dy[dir[i]]; v[i].l=l9; v[i].c=c9; if(a[l9][c9]) break; a[l9][c9]=1; } for(i=0;i<=l;++i) if(v[i].l!=l9&&v[i].l!=c9) { nr++; a[v[i].l][v[i].c]=0; } else break; nr=l-nr; //cerinta II for(i=1;i<=n;++i) for(j=1;j<=n;++j) if(verif(i,j)) fill(i,j); afisare(); } int main() { freopen("zona.in", "r", stdin); freopen("zona.out", "w", stdout); rezolva_problema(); return 0; }