/*
dfs暴搜
*/
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N = 33;
int n, x;
int w[N];
int res = 1e8;
void dfs(int j, int sum)
{
if(j>=n)
{
if(sum>=x)
res = min(res, sum);
}
else
{
dfs(j+1, sum);
dfs(j+1, sum+w[j]);
}
}
int main()
{
cin>>n>>x;
for(int i = 0; i < n; i ++) cin>>w[i];
dfs(0, 0);
cout<<res;
}
/*
暴力n位二进制遍历
*/
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N = 33;
int w[N];
int n, x;
int res = 1e8;
int main()
{
cin>>n>>x;
int sum = 0;
for(int i = 0; i < n; i ++) cin>>w[i];
for(int i = 0; i < 1<[HTML_REMOVED]>j & 1)
{
sum = sum + w[j];
}
}
if(sum>=x) res = min(res, sum);
}
cout<<res;
}
/*
二维0-1背包
*/
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N = 33;
int n, x;
int w[N];
const int M = 10000000;
int f[N][M];
int main()
{
cin>>n>>x;
int sum = 0;
for(int i = 1; i <= n; i ++)
{
cin>>w[i];
sum = sum + w[i];
}
int m = sum - x;
for(int i = 1; i <= n; i ++)
{
for(int j = 0; j <= m; j++)
{
f[i][j] = f[i-1][j];
if(j>=w[i])
f[i][j] = max(f[i-1][j],f[i-1][j-w[i]]+w[i]);
}
}
int res=0;
for(int i = 1; i <= m; i++) res=max(res, f[n][i]);
res = sum - res;
cout<<res;
}
/*
一维0-1背包
*/
include[HTML_REMOVED]
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N = 33;
int n, x;
int w[N];
const int M = 10000000;
int f[M];
int main()
{
cin>>n>>x;
int sum = 0;
for(int i = 1; i <= n; i ++)
{
cin>>w[i];
sum = sum + w[i];
}
int m = sum - x;
for(int i = 1; i <= n; i ++)
{
for(int j = m; j >= w[i]; j--)
{
f[j] = max(f[j],f[j-w[i]]+w[i]);
}
}
int res=0;
res = sum - f[m];
cout<<res;
}