#include<bits/stdc++.h>
using namespace std;
int n, k;
struct node
{
int len;
int a[50];
};
node chen(node x, node y)
{
int leny = y.len, lenx = x.len;
node s;
s.len = lenx + leny - 1;
for(int i = 1; i <= 45; i++)
s.a[i] = 0;
for(int i = 1; i <= lenx; i++)
{
for(int j = 1; j <= leny; j++)
{
s.a[i + j - 1] += x.a[i] * y.a[j] % 10;
s.a[i + j] += x.a[i] * y.a[j] / 10;
}
}
s.len += (s.a[s.len + 1] >= 1 ? 1 : 0);
int l = s.len;
for(int i = 1; i < l; i++)
{
s.a[i + 1] += s.a[i] / 10;
s.a[i] %= 10;
}
return s;
}
node input()
{
node s;
char c;
s.len = 0;
scanf("%c", &c);
do
{
s.a[++s.len] = c - '0';
scanf("%c", &c);
}while(c != ' ' && c != '\n');
for(int i = 1; i <= s.len / 2; i++)
swap(s.a[i], s.a[s.len - i + 1]);
return s;
}
void output(node a)
{
for(int i = a.len; i >= 1; i--)
printf("%d", a.a[i]);
printf("\n");
}
node int_node(int x)
{
node ans;
int len = 0;
while(x)
{
ans.a[++len] = x % 10;
x /= 10;
}
ans.len = len;
return ans;
}
node node_node(node a, int st, int ed)
{
node ans;
int l = a.len;
st = l - st + 1;
ed = l - ed + 1;
for(int i = ed; i <= st; i++)
{
ans.a[i - ed + 1] = a.a[i];
}
ans.len = st - ed + 1;
while(1)
{
if(ans.a[ans.len] == 0)
ans.len--;
else
break;
}
return ans;
}
bool cmp(node a, node b)
{
if(a.len != b.len)
return a.len < b.len;
int l = a.len;
for(int i = l; i >= 1; i--)
if(a.a[i] != b.a[i])
return a.a[i] < b.a[i];
return 1;
}
node f[15][45], a;
int main()
{
scanf("%d%d\n", &n, &k);
a = input();
for(int i = 0; i <= k; i++)
for(int j = 0; j <= n; j++)
f[i][j].len = 1;
for(int i = 1; i <= n; i++)
f[0][i] = node_node(a, 1, i);
for(int j = 0; j <= k; j++)
f[j][1] = int_node(1);
for(int i = 1; i <= k; i++)
{
for(int j = i; j <= n; j++)
{
for(int t = i; t <= j - 1; t++)
{
node key = chen(f[i - 1][t], node_node(a, t + 1, j));
f[i][j] = max(f[i][j], key, cmp);
}
}
}
output(f[k][n]);
return 0;
}