#include<iostream>
#include<string>
#include<stdio.h>
#include<cstring>
#include<ctype.h>
#include<algorithm>
#include<cmath>
using namespace std;
int n, m;
bool del[25];
int a[25];
int f[25000];
int can_reach, result, ans;
int max(int x, int y)
{
return x > y ? x : y;
}
void dp()
{
memset(f, 0, sizeof(f));
f[0] = 1;
can_reach = 0;
ans = 0;
for (int i = 1; i <= n; i++)
{
if (del[i] == 1) continue;
for (int j = can_reach; j >= 0; j--)
{
if (f[j] && !f[j + a[i]])
{
f[j + a[i]] = 1;
ans++;
}
}
can_reach += a[i];
}
result = max(ans, result);
printf("ret=%d\n", result);
}
void dfs(int now,int has_dele)
{
if (now > n || has_dele > m) return;
if (has_dele == m)
{
dp();
}
else
{
del[now] = 1;
dfs(now + 1, has_dele + 1);
del[now] = 0;
dfs(now + 1, has_dele);
}
}
int main()
{
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
dfs(1, 0);
printf("%d", result);
return 0;
}