#include <stdio.h>
#include <stdlib.h>
#define input "ghiozdan.in"
#define output "ghiozdan.out"
#define dimmax 20001
long n,g,a[dimmax],k,rez,obj,pos[dimmax],rezultat[dimmax],count;
void poz(long ls,long ld,long& k);
void quick(long ls,long ld);
void back(long p,long sum);
int main()
{
freopen(input,"r",stdin);
freopen(output,"w",stdout);
long i,j;
scanf("%ld%ld",&n,&g);
for(i=1;i<=n;i++)
scanf("%ld",&a[i]);
quick(1,n);
back(1,0);
printf("%ld %ld\n",rez,obj);
for(i=1;i<=obj;i++)
printf("%ld\n",a[rezultat[i]]);
// for(i=1;i<=n;i++)
// printf("%ld ",a[i]);
return 0;
}
void quick(long ls,long ld)
{
if(ls<ld)
{
poz(ls,ld,k);
quick(ls,k-1);
quick(k+1,ld);
}
}
void poz(long ls,long ld,long& k)
{
long i=ls,j=ld,i0=0,j0=-1,aux;
while(i<j)
{
if(a[i]<a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
aux=i0;
i0=-j0;
j0=-aux;
}
i+=i0;
j+=j0;
}
k=i;
}
void back(long p,long sum)
{
int i;
count++;
if(count>=160000000)
{
printf("%ld %ld\n",rez,obj);
for(i=1;i<=obj;i++)
printf("%ld\n",a[rezultat[i]]);
exit(0);
}
if(sum>rez)
{
rez=sum;
obj=p-1;
for(i=1;i<p;i++)
rezultat[i]=pos[i];
}
else
if(sum==rez&&p-1<obj)
{
obj=p-1;
for(i=1;i<p;i++)
rezultat[i]=pos[i];
}
for(i=pos[p-1]+1;i<=n;i++)
if(sum+a[i]<=g)
{
pos[++pos[0]]=i;
back(p+1,sum+a[i]);
--pos[0];
}
else
if(sum+a[i]>g)
break;
}