#include <bits/stdc++.h>
using namespace std;
long long const mod = 1e9 + 7;
long long const size_1d = 1e6 + 7;
long long const size_2d = 1e3 + 7;
long long power(long long x, long long y, long long mod = 2e18) {
  long long ans = 1;
  x %= mod;
  while (y) {
    if (y & 1) ans = (x * ans) % mod;
    x = (x * x) % mod;
    y >>= 1;
  }
  return ans;
}
long long modInverse(long long a, long long m) {
  long long m0 = m;
  long long y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long q = a / m;
    long long t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
long long gcdext(long long a, long long b, long long *x = 0, long long *y = 0) {
  if (a == 0) {
    *x = 0;
    *y = 1;
    return b;
  }
  long long x1, y1;
  long long gcd1 = gcdext(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd1;
}
int randomize() { return (rand() % 10000); }
bool ans[size_1d];
bool visited[size_1d];
bool recur(int k, std::vector<int> &v, bool flag) {
  if (visited[k]) return ans[k];
  for (int i = 0; i < v.size(); ++i) {
    if (k - v[i] >= 0 && recur(k - v[i], v, !flag) == flag) {
      ans[k] = flag;
      visited[k] = true;
      return flag;
    }
  }
  ans[k] = !flag;
  visited[k] = true;
  return !flag;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  for (int i = 0; i < size_1d; ++i) {
    visited[i] = false;
  }
  int n, k;
  cin >> n >> k;
  std::vector<int> v(n);
  for (int i = 0; i < n; ++i) {
    cin >> v[i];
  }
  if (!recur(k, v, false))
    cout << "First" << endl;
  else
    cout << "Second" << endl;
  return 0;
}
