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