#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
****************************************************************/