#include <bits/stdc++.h>
using namespace std;
int n,km,a[50],dp[51][51][51],p[51][51][51],ls[51];
string s;
void fz(int i)
{
dp[i][0][0]=p[1][i][0];
for(int k=1;k<=p[1][i][0];k++)
{
dp[i][0][k]=p[1][i][k];
}
return ;
}
void jf(int i,int j)
{
p[i][j][0]=p[i][j-1][0]+1;
for(int k=1;k<=p[i][j][0];k++)
{
if(k!=1)
p[i][j][k]+=p[i][j-1][k-1]+a[k];
else
p[i][j][k]+=a[k];
p[i][j][k+1]=p[i][j][k]/10;
p[i][j][k]%=10;
}
while(p[i][j][p[i][j][0]]==0&&p[i][j][0]>1)
p[i][j][0]--;
return ;
}
void add(int e,int fh,int wz)
{
ls[0]=max(dp[wz][fh-1][0],p[wz+1][e][0]);
for(int i=1;i<=ls[0];i++)
{
ls[i]+=dp[wz][fh-1][i]+p[wz+1][e][i];
ls[i+1]+=ls[i]/10;
ls[i]%=10;
}
while(ls[ls[0]]==0&&ls[0]>1)
ls[0]--;
return ;
}
bool bj(int e,int fh)
{
if(dp[e][fh][0]<ls[0])
return 1;
if(dp[e][fh][0]>ls[0])
return 0;
for(int i=ls[0];i>0;i--)
{
if(dp[e][fh][i]<ls[i])
return 1;
if(dp[e][fh][i]>ls[i])
return 0;
}
return 0;
}
void fz2(int e,int fh)
{
dp[e][fh][0]=ls[0];
for(int k=1;k<=ls[0];k++)
{
dp[e][fh][k]=ls[k];
}
return ;
}
void maxn(int e,int fh,int wz)
{
//dp[e][fh]=max(dp[wz][fh-1]+p[wz+1][e],dp[e][fh])
memset(ls,0,sizeof(ls));
add(e,fh,wz);
bool jg=bj(e,fh);
if(jg)
fz2(e,fh);
}
void dpys()
{
for(int j=1;j<=km;j++)
{
for(int i=j+1;i<=n;i++)
{
for(int k=j;k<i;k++)
{
maxn(i,j,k);
}
}
}
return ;
}
void print()
{
for(int i=dp[n][km][0];i>0;i--)
{
cout<<dp[n][km][i];
}
}
int main(int argc, const char * argv[]) {
cin>>n>>km;
cin>>s;
for(int i=1;i<=n;i++)
{
a[i]=s[n-i]-'0';
}
for(int i=1;i<=n;i++)
{
for(int j=i;j<=n;j++)
{
jf(i,j);
}
}
for(int i=1;i<=n;i++)
{
fz(i);
}
dpys();
print();
return 0;
}
我太难了