//poj 1946 经典DP
/*
对于一直骑行在非队首的选手,能量消耗和距离是相等的,这给了我们用DP来处理的条件。
DP[i][j]表示i个人骑行距离j的最短时间。
于是有DP[i][k]=DP[i-1][j]+min_time(E-(d-k),k-j)(0<k<=d,0<=j<k),min_time(i,j)表示队首的人有能量i,骑行距离j的最短时间。通过观察可以发现,对于给定的距离d个时间t,总是把d划分为尽量相等的t段时消耗的能量较少,这也即是min_time函数的求解方法。
*/
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int inf=1<<28;
int n,e,d;
const int vmax = 100;
int dp[21][101];
int MinTime(int e,int d)
{
if (e<d) return inf;
for (int t=1;;t++)
{
int a=d/t;
int b=d%t;
int c=t-b,sum=0;
while (b--) sum+=(a+1)*(a+1);
while (c--) sum+=a*a;
if (sum<=e) return t;
}
}
int main()
{
while (scanf("%d%d%d",&n,&e,&d)!=EOF)
{
if (d>e)
{
printf("0/n");
continue;
}
memset(dp,0,sizeof(dp));
for (int i=1;i<=d;i++)
dp[0][i]=inf;
for (int i=1;i<=n;i++)
for (int k=1;k<=d;k++)
{
dp[i][k]=inf;
for (int j=0;j<k;j++)
{
dp[i][k]=min(dp[i][k],dp[i-1][j]+MinTime(e-d+k,k-j));
}
}
/* for (int i=1;i<=n;i++)
{
for (int k=1;k<=d;k++)
printf("%d ",dp[i][k]);
printf("/n");
}*/
if (dp[n][d]>=inf)
printf("0/n");
else
printf("%d/n",dp[n][d]);
}
// system("pause");
return 0;
}