#include<bits/stdc++.h>
using namespace std;
int t,n,k,f[3001][3001],g[3001][3001],ans[3001],v[3001];
string s;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>k>>s;
s=' '+s;
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
memset(ans,0,sizeof(ans));
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
{
int j=0;
for(int k=i;k<=n;k++)
{
if(s[k]=='0')j++;
f[i][j]=k-i+1;
}
j++;
while(j<=n)
{
f[i][j]=f[i][j-1];
j++;
}
}
for(int i=n;i>=1;i--)
{
int j=0;
for(int k=i;k>=1;k--)
{
if(s[k]=='0')j++;
g[i][j]=i-k+1;
}
j++;
while(j<=n)
{
g[i][j]=g[i][j-1];
j++;
}
}
for(int j=0;j<=n;j++)
{
for(int i=1;i<=n;i++)g[i][j]=max(g[i][j],g[i-1][j]);
}
for(int j=0;j<=n;j++)
{
for(int i=n;i>=1;i--)f[i][j]=max(f[i][j],f[i+1][j]);
}
v[0]=1;
ans[0]=max(g[n][k],f[1][k]);
for(int i=1;i<=n;i++)
{
int cnt=0;
for(int j=i;j<=n;j++)
{
if(s[j]=='1')cnt++;
if(k<cnt)break;
ans[j-i+1]=max(ans[j-i+1],f[j+1][k-cnt]);
ans[j-i+1]=max(ans[j-i+1],g[i-1][k-cnt]);
v[j-i+1]=1;
}
}
for(int i=1;i<=n;i++)
{
int num=0;
for(int j=0;j<=n;j++)
{
if(v[j])num=max(num,i*j+ans[j]);
}
printf("%d ",num);
}
printf("\n");
}
system("pause");
return 0;
}