#pragma GCC optimize("Ofast", "unroll-loops")
#pragma GCC target("avx2,fma")
#include <bits/stdc++.h>
using namespace std;
#define rep(i, a, b) for (__typeof(a) i = (a); i < (b); ++i)
#define iter(it, c) \
  for (__typeof((c).begin()) it = (c).begin(); it != (c).end(); ++it)
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vll> vvll;
const int INF = ~(1 << 31);

#define sc second
#define fs first
#define pb push_back
#define mp make_pair

const double EPS = 1e-9;
const double pi = acos(-1);
typedef unsigned long long ull;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
template <class T>
T smod(T a, T b) {
  return (a % b + b) % b;
}
// vim: cc=60 ts=2 sts=2 sw=2:

int a[105];

int memo[105][100'050];
bool dp(int at, int left) {
  if (at < 0) return 0;
  if (left == 0) return 0;
  if (left < 0) return 1;

  if (memo[at][left] != -1) return memo[at][left];

  bool res = dp(at - 1, left) | !dp(at, left - a[at]);

  return memo[at][left] = res;
}

int main() {
  // code
  memset(memo, -1, sizeof(memo));

  int n, k;
  cin >> n >> k;

  rep(i, 0, n) cin >> a[i];

  if (dp(n - 1, k))
    cout << "First" << endl;
  else
    cout << "Second" << endl;

  // codend
}
