#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") //#pragma warning(disable : 4996) //#define ATCODER #ifdef ATCODER #include using namespace atcoder; #endif #include #include #include #include #include #include #include #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; #ifdef _MSC_VER #include"stdafx.h" #include #define __builtin_popcount __popcnt #define __builtin_popcountll __popcnt64 void debug_out() { cerr << endl; } template void debug_out(Head H, Tail... T) { cerr << " " << (H); debug_out(T...); } #define DEBUG(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__) #else #define DEBUG(...) 42 #endif #define ll long long #define REP(i, n) for (ll i = 0; i < (n); ++i) #define REPR(i, n) for (ll i = (n) - 1; i >= 0; --i) #define FOR(i, m, n) for (ll i = m; i < n; ++i) #define VSORT(v) sort(v.begin(), v.end()); #define VREVERSE(v) reverse(v.begin(), v.end()) #define print(x) cout << (x) << '\n' #define spa <<" "<< #define lb(v, n) lower_bound(v.begin(), v.end(), (n)) #define ub(v, n) upper_bound(v.begin(), v.end(), (n)) #define int long long #define double long double #define all(x) (x).begin(), (x).end() #define print_space(v) REP(i, v.size()) cout << v[i] << " \n"[i==(int)v.size()-1] template inline void chmin(T1 & a, T2 b) { if (a > b) a = b; } template inline void chmax(T1& a, T2 b) { if (a < b) a = b; } typedef pair pii; typedef pair pll; std::random_device rd; std::mt19937 mt(rd()); constexpr ll MOD = 1e9 + 9; constexpr int MAX = 500050; const double pi = acos(-1); constexpr double EPS = 1e-8; constexpr ll LINF = 1e17 + 1; constexpr int INF = 1e9 + 1; //#define each(it,o) for(__typeof((o).begin()) it = (o).begin(); it != (o).end(); ++ it) int g[1 << 20]; int mex(const set& s) { int r = 0; for (auto i = s.begin(); i != s.end();++i) if (r == *i) r++; return r; } void solve() { int N; cin >> N; int V; cin >> V; vectorA(N); REP(i, N)cin >> A[i]; ll sum = accumulate(all(A), 0LL); if (sum <= V) { print("Draw"); return; } REPR(bit, 1<(bit) << endl; REP(j, N) { if (bit&(1<= V) { g[bit] = 0; continue; } else { setst; REP(k, N){ if (!(bit&(1< V)continue; st.insert(g[nbit]); } } //for (auto x : st)cerr << x << " "; //cerr << endl; //for (auto x : st)cerr << x << " "; //cerr << endl; g[bit] = mex(st); //DEBUG(bit,g[bit]); } } REP(bit, 1 << N) { //bitset<5>b = bit; //DEBUG(b, g[bit]); } if (g[0] == 0)print("Second"); else print("First"); } signed main() { cin.tie(0); ios::sync_with_stdio(false); //int q; cin >> q; while (q--) solve(); }