#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using pi = pair<int, int>;
using Pld = pair<ld, ld>;
using Vec = vector<ll>;
using VecP = vector<pi>;
using VecB = vector<bool>;
using VecC = vector<char>;
using VecD = vector<ld>;
using VecS = vector<string>;
using Graph = vector<VecP>;
void sonic() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
void setp(const ll n) { cout << fixed << setprecision(n); }
const ll INF = 1e9 + 1;
const ll LINF = 1e18 + 1;
const ll MOD = 1e9 + 7;
const ld PI = acos(-1);
const ld EPS = 1e-11;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
void co(T e) {
  cout << e << "\n";
}
template <typename T>
void co(const vector<T> &v) {
  for (const auto &e : v) {
    cout << e << " ";
  }
  cout << "\n";
}
ll gcd(ll a, ll b) {
  if (a < b) swap(a, b);
  if (b == 0) return a;
  unsigned r;
  while ((r = a % b)) {
    a = b;
    b = r;
  }
  return b;
}
ll lcm(ll a, ll b) {
  ll g = gcd(a, b);
  return a * b / g;
}
bool prime(ll n) {
  for (ll i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) return false;
  }
  return n != 1;
}
Vec fac, finv;
ll PowMod(ll a, ll n) {
  if (n == 1) return a;
  if (n % 2 == 0) return PowMod(a * a % MOD, n / 2);
  return a * PowMod(a * a % MOD, n / 2) % MOD;
}
ll combi(ll n, ll k) {
  if (k > n) return 0;
  return fac[n] * finv[k] % MOD * finv[n - k] % MOD;
}
int n, k;
vector<vector<int> > memo;
int A[100];
bool f(int l, int x) {
  if (memo[l][x] != -1) return memo[l][x];
  bool res = 0;
  for (ll(i) = (0); (i) < (n); ++(i))
    if (A[i] <= l) res |= 1 ^ f(l - A[i], x ^ 1);
  memo[l][x] = res;
  return res;
}
int main() {
  cin >> n >> k;
  for (ll(i) = (0); (i) < (n); ++(i)) cin >> A[i];
  memo.resize(k + 1, vector<int>(n, -1));
  if (f(k, 1))
    co("First");
  else
    co("Second");
}
