#include <cstdio>
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;
}