//fafu 1001 dp(背包)
//题意是 n 个人花一定量的钱 在m道菜中各选一道菜(都选不同的)
//要求选完后能够花尽量多的钱
//这题其实就是背包问题,具体看代码
#include <stdio.h>
#include <string.h>
#define N 1005
#define M 55
int n_pers, n_meal, money;
int cost[M], dp[N], cnt[M];
bool cmp(int a, int b)
{
if(a > b)
return true;
return false;
}
int main()
{
while(scanf("%d%d%d", &n_pers, &n_meal, &money) != EOF)
{
for(int i = 0; i < n_meal; ++i)
scanf("%d", &cost[i]);
//dp数组下标表示 花的钱数,值表示点几道菜
memset(dp, -1, sizeof(dp));
int ans = 0;
dp[0] = 0;
for(int i = 0; i < n_meal; ++i) //点第 i 道菜
{
for(int j = money; j >= cost[i]; --j)
{
int index = j-cost[i];
if(dp[index] >= 0 && dp[index] + 1 <= n_pers)
{ //若之前有花 j-cost[i] 这么多,则 可以到达j 这一状态
//而且 j-cost[i] 这一状态所点的菜 再加上i 这道菜 不会超过总人数
if(dp[j] == -1 || dp[j] > dp[index] + 1 )
{
if(ans < j)
ans = j; //记录最大花费
dp[j] = dp[index] + 1;
}
}
}
}
printf("%d\n", ans);
}
return 0;
}