#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll=long long; template using V = vector; template using P = pair; using vll = V; using vvll = V; #define ALL(v) v.begin(),v.end() template < class T > inline bool chmax(T& a, T b) {if (a < b) { a=b; return true; } return false; } template < class T > inline bool chmin(T& a, T b) {if (a > b) { a=b; return true; } return false; } #define DEBUG_VLL(vec) for(int sz=0;sz> n >> v; vll a(n); for (int i = 0; i < n; i++) cin >> a[i]; if (accumulate(ALL(a), 0LL) <= v) { cout << "Draw\n"; return 0; } V dp(1 << n, -1); auto memo = [&](auto && self, int state, ll sum) -> bool { if (dp[state] != -1) return dp[state]; if (sum > v) return dp[state] = 1; int tmp = 1; for (int i = 0; i < n; i++) { if (state >> i & 1) continue; tmp = tmp & self(self, state | (1 << i), sum + a[i]); } return (dp[state] = tmp ^ 1); }; if (memo(memo, 0, 0)) cout << "First\n"; else cout << "Second\n"; return 0; }