#include
#include<bits/stdc++.h>
using namespace std;
int **dp;
int GetMinCost(int *a,int n,int w)
{
//dp[0][0]=0;
for(int i=0;i<=n;i++){dp[i][0]=0;}//set first column to o
for(int j=1;j<=w;j++){dp[0][j]=INT_MAX-1001;}//set first row to INF
for(int i=1;i<=n;i++)
{
for(int j=1;j<=w;j++)
{
if(a[i-1]==-1)
{
dp[i][j]=INT_MAX-1;
}
if(a[i-1]>j)//current wt is more than the current capacity
{
dp[i][j]=dp[i-1][j];
// cout<<"i::"<<i<<"j::"<<j<<"dp::"<<dp[i][j]<<" ";
}
else if(a[i-1]<=j)
{
dp[i][j]=min(a[i-1]+dp[i-1][j-a[i-1]],dp[i-1][j]);
// cout<<"xi::"<<i<<"j::"<<j<<"dp::"<<dp[i][j]<<" f1 "<<a[i-1]<<" f2 "<<dp[i-1][j-a[i-1]]<<" s "<<dp[i-1][j]<<endl;
}
}
//cout<<endl;
}
//print the dp table
// for(int i=0;i<=n;i++)
// {
// for(int j=0;j<=w;j++)
// {
// cout<<setw(3)<<dp[i][j]<<" ";
// }
// cout<<endl;
// }
return dp[n][w];
}
int main()
{ //cout<<“main”<<endl;
int n,w;
cin>>n>>w;
int a[w];
for(int i=0;i<w;i++)
{
cin>>a[i];
}
//dp array
dp=new int*[1001]; //rowcount
for(int i=0;i<1001;++i){ //
dp[i]=new int[1001];//col int *a=new int[100]
}
for(int i=0;i<=n;i++)
{
for(int j=0;j<=w;j++)
{//*(*(dp+i)+j)=-1 //dp[2][1]
dp[i][j]=-1;
}
}
int ans = GetMinCost(a,n,w);
cout<<ans<<endl;
return 0;
}