#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long lo;
const int N=20;
lo m,n,a[N],minn[N],space[1<<N],f[1<<N];
std::vector<lo>res;
lo min(lo x,lo y){return x>y?y:x;}
lo max(lo x,lo y){return x>y?x:y;}
lo dfs(lo S)
{
if(!S)return minn[n];
if(f[S]!=0)return f[S];
lo x=__builtin_ctzll(S),s=S^(1<<x);
for(lo T=s;;T=(T-1)&s){f[S]=max(f[S],dfs(T)+dfs(s^T)+a[x+1]);if(!T)break;}
f[S]=min(f[S],minn[x]);
if(space[S]>=minn[x])f[S]=-1e18;
return f[S];
}
char ch;
inline void read(lo&x)
{
while((ch=getchar())<48||ch>57);
x=ch^48;
while((ch=getchar())<58&&ch>47)x=(x<<1)+(x<<3)+(ch^48);
}
inline void write(const lo&x)
{
if(x>9)write(x/10);
putchar(x%10+48);
}
int main()
{
read(m);read(n);
for(int i=1;i<=n;++i)read(a[i]);
for(lo S=0;S<(1<<n);++S)
{
minn[0]=m+1;
for(int i=1;i<=n;++i)
{
minn[i]=minn[i-1];
if(!((S>>(i-1))&1))minn[i]=min(minn[i],a[i]);
}
if(S)space[S]=space[S^(S&(-S))]+a[__builtin_ctzll(S)+1];
memset(f,0,sizeof(f));
if(dfs(S)>m)res.push_back(space[S]);
}
sort(res.begin(),res.end());
unique(res.begin(),res.end());
write(res.size());putchar('\n');
for(lo sp:res)write(sp),putchar(' ');
}
rt
也可能是写得有问题 但调不出来了(