#include<bits/stdc++.h>
using namespace std;  
//四个可以走的方向 
int fx[5]={0,1,-1,0,0};  
int fy[5]={0,0,0,1,-1};  
 
//泳池的深度 
int swim[110][110];  
 
//标记是否走过 
bool f[110][110];  
int n,m,ans,s;  
int p1,p2;
 
int maxsum;
//从x、y位置开始 
void find(int x,int y,int sum)  
{  
    
        if(sum>maxsum) maxsum=sum;
        //标记为走过 
        //遍历四个方向 
        for(int i=1;i<=4;++i)  
        {  
            //将要走到的位置 
            int dx=x+fx[i];  
            int dy=y+fy[i];  
            
            //如果将要走到的位置和本位置相同,且不越界 
            if(swim[x][y]<swim[dx][dy]&&dx>0&&dy>0&&dx<=n&&dy<=m&&!f[dx][dy]) {
            	f[dx][dy] = true;
        		find(dx,dy,sum+swim[dx][dy]); 
        		f[dx][dy] = false;
			} 
        }  
     
     
}  
int main()  
{  
    cin>>n>>m>>s;
 
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= m;j++){
            s = (s * 345) % 19997;
            swim[i][j] = s % 10 + 1;
        }
    } 
 
    //循环从每个点开始回溯找最大面积 
    for(int i=1;i<=n;++i)  
        for(int j=1;j<=m;++j)  
        {
            maxsum=0;
            find(i,j,swim[i][j]);
//            cout<<maxsum<<endl;
            ans=max(ans,maxsum);  
        }
             
    cout<<ans<<endl;
    return 0;  
}

/**************************************************************
	Problem: 1381
	User: admin
	Language: C++
	Result: Accepted
	Time:56 ms
	Memory:2132 kb
****************************************************************/