#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 2010;
const int maxm = 30;
int n, m, a[maxm], ans;
bool f[maxn];
bool vis[maxm];
void dfs(int k,int last)
{
if (k == m + 1)
{
memset(f, 0, sizeof(f));
f[0] = 1;
for (int i = 1; i <= n; i++)
if (!vis[i])
for (int j = 2000; j >= 0; j--)
if(j + a[i] <= 2000)
f[j + a[i]] = f[j];
int num = 0;
for (int i = 1; i <= 2000; i++)
num += f[i];
ans = max(ans, num);
return;
}
for (int i = last + 1; i <= n; i++)
{
vis[i] = 1;
dfs(k + 1, i);
vis[i] = 0;
}
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
dfs(1, 0);
cout << ans;
}