#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>

using namespace std;

int dp[1024][10024],n,Sum,Price[1024],Ans,used[1024];

void Read ()
{
    int i,j;
    scanf ("%d%d",&n,&Sum);
    ///cin>>n>>Sum;
    for (i=1;i<=n;i++)
    {
        scanf ("%d",&Price[i]);
        used[Price[i]]++;
    }
    ///cin>>Price[i];
    sort (Price+1,Price+n+1);
}

void Backpack ()
{
    int i,j;
    for (i=0;i<=n;i++)
    dp[i][0]=0;
    for (i=0;i<=Sum;i++)
    dp[0][i]=0;

    for (i=1;i<=n;i++)
    {
        for (j=1;j<=Sum;j++)
        {
            dp[i][j]=dp[i-1][j];
            if (dp[i][j]<dp[i-1][j-1]+Price[i]&&dp[i-1][j-1]+Price[i]<=Sum)dp[i][j]=dp[i-1][j-1]+Price[i];
            if (used[Sum-dp[i][j]]>0&&Sum-dp[i][j]>Price[i]){printf ("%d\n",Sum);return ;}
        }
    }

    for (i=1;i<=n;i++)
    {
        for (j=1;j<=Sum;j++)
        {
            if (dp[i][j]<=Sum&&dp[i][j]>Ans)Ans=dp[i][j];
            ///printf ("%d ",dp[i][j]);
        }
        ///printf ("\n");
    }
    printf ("%d\n",Ans);
}

int main ()
{
    Read ();
    Backpack ();
    ///cout << Ans <<endl;
    return 0;
}
