#include <bits/stdc++.h>
using namespace std;
template <typename T>
using V = vector<T>;
template <typename T, typename U>
using P = pair<T, U>;
template <typename I>
void join(ostream &ost, I s, I t, string d = " ") {
  for (auto i = s; i != t; ++i) {
    if (i != s) ost << d;
    ost << *i;
  }
  ost << endl;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (auto &a : v) is >> a;
  return is;
}
template <typename T, typename U>
istream &operator>>(istream &is, pair<T, U> &p) {
  is >> p.first >> p.second;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, vector<T> &v) {
  os << "{";
  for (auto i = (v).begin(); i != (v).end(); ++i) {
    if (i != v.begin()) os << ",";
    os << *i;
  }
  os << "}";
  return os;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, pair<T, U> &p) {
  os << "(" << p.first << "," << p.second << ")";
  return os;
}
template <typename T>
T &chmin(T &a, const T &b) {
  return a = min(a, b);
}
template <typename T>
T &chmax(T &a, const T &b) {
  return a = max(a, b);
}
bool dp[2][101000];
bool visit[2][101000];
bool rec(bool p, int k, vector<int> &a) {
  if (k < 0) return p;
  if (visit[p][k]) return dp[p][k];
  for (auto x : a) {
    if (rec(!p, k - x, a) == p) {
      return dp[p][k] = p;
    }
  }
  return dp[p][k] = !p;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int N, K;
  cin >> N >> K;
  vector<int> a(N);
  cin >> a;
  if (rec(true, K, a)) {
    cout << "First" << endl;
  } else {
    cout << "Second" << endl;
  }
  return 0;
}
