#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; #define pb push_back #define all(x) (x).begin(), (x).end() #define sqr(x) ((x) * (x)) #define X first #define Y second #define FOR(i, a, b) for (int i = (a); i < (b); ++i) #define REP(i, n) FOR (i, 0, n) #define TRACE(x) cout << #x << " = " << x << endl #define _ << " _ " << #define debug(...) fprintf(stderr, __VA_ARGS__) #define MAXN 440 #define MOD 167772161 #pragma GCC optimize("Ofast") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") int n, k; ll we[MAXN]; vector w; int dpl[MAXN][MAXN][MAXN]; int dpr[MAXN][MAXN][MAXN]; ll pre[MAXN]; int main() { scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%lld", &we[i]); } for (int wo = 0; wo < n; wo++) { memset(dpl, 0, sizeof dpl); for (int i = 0; i < MAXN; i++) { dpl[i][0][0] = dpr[i][0][0] = 1; } w.clear(); for (int i = 0; i < n; i++) { if (wo == i) continue; w.pb(we[i]); } sort(w.begin(), w.end()); for (int i = 0; i < n - 1; i++) { pre[i] = (i ? pre[i - 1] : 0) + w[i]; } sort(w.begin(), w.end(), greater()); //for (int i: w) printf("%d ", i);cout<= 0 && l ? dpl[i - 1][j - w[i]][l - 1] : (j - w[i] == 0 && l == 1)); if (dpl[i][j][l] >= MOD) dpl[i][j][l] -= MOD; //cout << i <<' ' <= 0; i--) { for (int j = 0; j <= k; j++) { for (int l = 0; l < n; l++) { dpr[i][j][l] = (i < n - 1 ? dpl[i + 1][j][l] : 0) + (i < n - 1 && j - w[i] >= 0 && l ? dpl[i + 1][j - w[i]][l - 1] : (j - w[i] == 0 && l == 1)); dpr[i][j][l] %= MOD; } } }*/ /*for (int i = 0; i < n; i++) { for (int j = 0; j < n - 1; j++) { } }*/ return 0; }