#include<bits/stdc++.h>
using namespace std;
struct INT{
int len;
bool f;
int a[100];
INT(string s=" "){
memset(a,0,sizeof a);
len=0;
f=0;
if(s!=" "){
len=s.size();
if(s[0]=='-'){
f=1;
len--;
}
else{
s=" "+s;
}
for(int i=len;i>=1;i--){
a[len-i+1]=(int(s[i]-'0'));
}
}
}
int &operator[](int i){
return a[i];
}
void ll(){
while(len>=2&&a[len]==0){
a[len]=0;
len--;
}
}
void print(){
ll();
if(a[len]==0){
cout<<0;
}
else{
if(f){
cout<<'-';
}
for(int i=len;i>=1;i--){
cout<<a[i];
}
}
}
};
INT operator+(INT a,INT b){
int N=max(a.len,b.len)+1;
for(int i=1;i<=N;i++){
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
a.len=N;
a.ll();
return a;
}
INT operator*(INT a,INT b){
INT c(" ");
c.f=(a.f!=b.f);
int N=a.len+b.len;
const int &n=a.len;
const int &m=b.len;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
c.len=N;
c.ll();
return c;
}
INT operator+(INT a,int b){
a[1]+=b;
a[2]+=a[1]/10;
a[1]%=10;
for(int i=2;i<=a.len;i++){
a[i]+=b;
a[i+1]+=a[i]/10;
a[i]%=10;
}
a.ll();
return a;
}
bool operator<(INT a,INT b){
if(a.f!=b.f){
if(a.f){
return 1;
}
return 0;
}
if(a.f==1){
if(a.len==b.len){
for(int i=a.len;i>=1;i--){
if(a[i]>b[i]){
return 1;
}
}
return 0;
}
return a.len>b.len;
}
else{
if(a.len==b.len){
for(int i=a.len;i>=1;i--){
if(a[i]<b[i]){
return 1;
}
}
return 0;
}
return a.len<b.len;
}
}
INT dp[50][50][10];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
INT s10("10");
int n,k;
string x;
cin>>n>>k>>x;
INT xx(x);
xx.print();
cout<<"\n";
k++;
for(int len=1;len<=n;len++){
for(int i=1;i<=n;i++){
int j=i+len-1;
if(j>n){
break;
}
for(int kk=1;kk<=min(len,k);kk++){
if(kk==1){
dp[i][j][kk]=dp[i][j-1][1]*s10+xx[j];
}
else{
for(int l=i;l<j;l++){
for(int k1=1;k1<kk;k1++){
dp[i][j][kk]=max(dp[i][j][kk],dp[i][l][k1]*dp[l+1][j][kk-k1]);
}
}
}
dp[i][j][kk].print();
cout<<"\n";
}
}
}
dp[1][n][k].print();
return 0;
}