#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("unroll-loops")
using namespace std;
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int MAXN = 1e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long int LLINF = 0x3f3f3f3f3f3f3f3f;
const double EPS = 1e-9;
const double PI = acos(-1);
template <typename T>
T max_self(T& a, T b) {
  if (a < b) a = b;
  return a;
}
template <typename T>
T min_self(T& a, T b) {
  if (a > b) a = b;
  return a;
}
template <typename T>
T add(T x, T y) {
  return ((x % MOD) + (y % MOD)) % MOD;
}
template <typename T>
T mul(T x, T y) {
  return ((x % MOD) * (long long)(y % MOD)) % MOD;
}
template <typename T>
T sub(T x, T y) {
  return add(x, -y + MOD);
}
template <typename T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <typename T>
T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <typename T>
vector<T> read(vector<T>& v, int n) {
  v.resize(n);
  for (auto& x : v) cin >> x;
}
template <typename T>
void trav(vector<T>& v) {
  for (int i = 0; i < (int)v.size(); ++i) {
    cout << v[i];
    if (i != (int)v.size() - 1) cout << ' ';
  }
}
int lg2(long long x) { return 64 - __builtin_clzll(x) - 1; }
int lg2(int x) { return 32 - __builtin_clzll(x) - 1; }
int n, k, a[MAXN];
bool dp[MAXN];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; ++i) {
    cin >> a[i];
  }
  dp[0] = false;
  for (int i = 0; i <= k; ++i) {
    if (dp[i] == false) {
      for (int j = 0; j < n; ++j) {
        dp[i + a[j]] = true;
      }
    }
  }
  string ans = "First";
  if (!dp[k]) ans = "Second";
  cout << ans << "\n";
  return 0;
}
