#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int vis[100];
int v[100],w[100], c, n, m[100][100];
int Knapsack()
{
int jmax=min(w[n]-1,c);
for(int i=1;i<=jmax;++i)
m[n][i]=0;
for(int i=w[n];i<=c;++i)
m[n][i]=v[n];
for(int i=n-1;i>=1;--i)
{
jmax=min(w[i]-1,c);
for(int j=1;j<=jmax;++j)
m[i][j]=m[i+1][j];
for(int j=w[i];j<=c;++j)
m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);
}
m[1][c]=m[2][c];
if(c>=w[1])
m[1][c]=max(m[2][c],m[2][c-w[1]]+v[1]);
return m[1][c];
}
void put()
{
for(int i=1;i<n;++i)
if(m[i][c]==m[i+1][c])
{
vis[i]=0;
}
else
{
vis[i]=1;
c-=w[i];
}
if(m[n][c])
vis[n]=1;
else
vis[n]=0;
for(int i=1;i<=n;++i)
cout<<vis[i]<<" ";
}
int main()
{
cin>>n>>c;
memset(m,0,sizeof(m));
for(int i=1;i<=n;++i)
{
cin>>v[i]>>w[i];
}
cout<<Knapsack()<<endl;
put();
}
#include<iostream>
#include<cstring>
using namespace std;
int vis[100];
int v[100],w[100], c, n, m[100][100];
int Knapsack()
{
int jmax=min(w[n]-1,c);
for(int i=1;i<=jmax;++i)
m[n][i]=0;
for(int i=w[n];i<=c;++i)
m[n][i]=v[n];
for(int i=n-1;i>=1;--i)
{
jmax=min(w[i]-1,c);
for(int j=1;j<=jmax;++j)
m[i][j]=m[i+1][j];
for(int j=w[i];j<=c;++j)
m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);
}
m[1][c]=m[2][c];
if(c>=w[1])
m[1][c]=max(m[2][c],m[2][c-w[1]]+v[1]);
return m[1][c];
}
void put()
{
for(int i=1;i<n;++i)
if(m[i][c]==m[i+1][c])
{
vis[i]=0;
}
else
{
vis[i]=1;
c-=w[i];
}
if(m[n][c])
vis[n]=1;
else
vis[n]=0;
for(int i=1;i<=n;++i)
cout<<vis[i]<<" ";
}
int main()
{
cin>>n>>c;
memset(m,0,sizeof(m));
for(int i=1;i<=n;++i)
{
cin>>v[i]>>w[i];
}
cout<<Knapsack()<<endl;
put();
}