#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int max(int a,int b){
	if(b>a)return b;
	return a;
}

int p[10][10];
int cp[10][10];
int flag[10][10];
int h,w,c;

struct data{
	int x,y;
};

struct data que[5000000];
int f,t;
void push(int xx,int yy){
	que[t].x=xx;
	que[t].y=yy;
	t++;
}

struct data pop(){
	return que[f++];
}

int sx[4]={0,1,0,-1};
int sy[4]={1,0,-1,0};
int col[7],res;

int bfs(int cc){
	memset(flag,0,sizeof(flag));
	f=0,t=0;
	push(1,1);
	flag[1][1]=1;
	while(f!=t){
		struct data q=pop();
		int i;
		for(i=0;i<4;i++){
			int nx=sx[i]+q.x,ny=sy[i]+q.y;
			if(flag[nx][ny]==0){
				if(cp[q.x][q.y]==cp[nx][ny]){
					flag[nx][ny]=1;
					push(nx,ny);
				}
			}
		}
	}
	int cnt=0;
	int i,j;
	for(i=1;i<=h;i++){
		for(j=1;j<=w;j++){
			if(flag[j][i]==1)cp[j][i]=cc;
			cnt+=flag[j][i];
		}
	}
	return cnt;
}
int d[6];
void dfs(int x){
	if(x<4){
		for(d[x]=1;d[x]<=6;d[x]++){
			col[x]=d[x];
			dfs(x+1);
		}
	}else{
		col[4]=c;
		int i,j;
		for(i=1;i<=h;i++){
			for(j=1;j<=w;j++){
				cp[j][i]=p[j][i];
			}
		}
		for(i=0;i<5;i++){
			bfs(col[i]);
		}
		res=max(res,bfs(7));
	}
}

int main(void){
	while(1){
		scanf("%d %d %d",&h,&w,&c);
		if(h+w+c==0)break;
		res=0;
		memset(p,0,sizeof(p));
		int a,b;
		for(a=1;a<=h;a++){
			for(b=1;b<=w;b++){
				scanf("%d",&p[b][a]);
			}
		}
		dfs(0);
		printf("%d\n",res);
	}
	return 0;
}