//#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
#define rep(i, n) for(int i=0; i<n; ++i)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define int long long
using namespace std;
using ll = int64_t;
using ld = long double;
using P = pair<int, int>;
using vs = vector<string>;
using vi = vector<int>;
using vvi = vector<vi>;
template<class T> using PQ = priority_queue<T>;
template<class T> using PQG = priority_queue<T, vector<T>, greater<T> >;
const int INF = 0xccccccc;
const ll LINF = 0xcccccccccccccccLL;
template<typename T1, typename T2>
inline bool chmax(T1 &a, T2 b) {return a < b && (a = b, true);}
template<typename T1, typename T2>
inline bool chmin(T1 &a, T2 b) {return a > b && (a = b, true);}
template<typename T1, typename T2>
istream &operator>>(istream &is, pair<T1, T2> &p) { return is >> p.first >> p.second;}
template<typename T1, typename T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) { return os << p.first << ' ' << p.second;}



//head


int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, t;
  cin >> n >> t;
  if(n == 1) {
    int a;
    cin >> a;
    if(a > t) cout << 0 << endl;
    else cout << a << endl;
    return 0;
  }
  vi a(n);
  rep(i, n) cin >> a[i];
  int m = n/2;
  vi z(1<<m);
  rep(i, 1<<m) {
    rep(j, m) if(i>>j&1) {
      z[i] += a[j];
    }
  }
  sort(all(z));
  int _m = n-m;
  int ans = 0;
  rep(i, 1<<_m) {
    int now = 0;
    rep(j, _m) if(i>>j&1) {
      now += a[j+m];
    }
    now = t-now;
    if(now < 0) continue;
    auto itr = upper_bound(all(z), now);
    chmax(ans, t-now+*prev(itr));
  }
  cout << ans << endl;
}
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int a, b, c;
	cin >> a >> b >> c;
	
	c *= 1000;
	bool z = false;
	int l, r;
	for (int i = 1; i <= c; i++) {
		l = i*a;
		r = i*b;
		
		if (l <= c && c <= r) {
			z = true;
			break;
		}
	}
	
	if (z) {
		int x = (c / b) + (c % b > 0);
		int y = c / a;
		cout << x << " " << y;
	}
	else {
		cout << "UNSATISFIABLE";
	}
    return 0;
}
