#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int mu[110]; //mu[i]表示第i个木桩的位置
int dis[11000]; //使用dis保存任意木桩之间的可能的距离
int num; //记录保存在数组dis中的元素的个数
int n,k,p; //k是木桩的数量
int numOfOx(int d) //当牛与牛之间最短的距离为d时候,可以放牛的个数为num
{
int sum=0; //记录当前木桩和上一个牛的距离
int num=1;
for(int i=2;i<=k;i++)
{
sum+=mu[i]-mu[i-1];
if(sum>=d)
{
num++;
sum=0;
}
}
return num;
}
int main(void)
{
cin >> n >> k >> p;
mu[1]=p;
for(int i=2;i<=k;i++)
{
p = p + ((p*2357+137) % 10) + 1;
mu[i] = p;
}
for(int i=1;i<=k;i++)
{
for(int j=i+1;j<=k;j++)
{
dis[++num]=mu[j]-mu[i]; //使用dis记录两个木桩之间的距离,用dis保存可能的情况。
}
}
sort(dis+1,dis+num+1); //对距离从小到大进行排序
for(int i=1;i<num;i++)
{
//明确一个信息: 奶牛之间距离规定越长,可以放的奶牛的个数越少
//如果距离为dis[i]时候可以放n奶牛,距离为dis[i+1]时放的奶牛个数小于n,那么说明最大距离为dis[i]
int num1 = numOfOx(dis[i]);
int num2 = numOfOx(dis[i+1]);
if(num1>=n && num2<n)
{
cout << dis[i] << endl;
break;
}
}
return 0;
}