Problem p03170 (C++)

Buggy submission (status: Runtime Error):
//           _____                  _______                  _____ _____
//          /\    \                /::\    \                /\    \ /\    \
//         /::\    \              /::::\    \              /::\____\ /::\    \
//        /::::\    \            /::::::\    \            /:::/    / /::::\    \
//       /::::::\    \          /::::::::\    \          /:::/    /
//       /::::::\    \
//      /:::/\:::\    \        /:::/~~\:::\    \        /:::/    /
//      /:::/\:::\    \
//     /:::/__\:::\    \      /:::/    \:::\    \      /:::/    / /:::/__\:::\ \
//    /::::\   \:::\    \    /:::/    / \:::\    \    /:::/    / /::::\   \:::\
//    \
//   /::::::\   \:::\    \  /:::/____/   \:::\____\  /:::/    /      _____
//   /::::::\   \:::\    \
//  /:::/\:::\   \:::\    \|:::|    |     |:::|    |/:::/____/
//  /\    \ /:::/\:::\   \:::\    \
// /:::/  \:::\   \:::\____|:::|____|     |:::|____|:::|    /      /::\____/:::/
// \:::\   \:::\____\
// \::/    \:::\  /:::/    /\:::\   _\___/:::/    /|:::|____\     /:::/    \::/
// \:::\  /:::/    /
//  \/____/ \:::\/:::/    /  \:::\ |::| /:::/    /  \:::\    \   /:::/    /
//  \/____/ \:::\/:::/    /
//           \::::::/    /    \:::\|::|/:::/    /    \:::\    \ /:::/    /
//           \::::::/    /
//            \::::/    /      \::::::::::/    /      \:::\    /:::/    / \::::/
//            /
//            /:::/    /        \::::::::/    /        \:::\__/:::/    / /:::/ /
//           /:::/    /          \::::::/    /          \::::::::/    / /:::/ /
//          /:::/    /            \::::/____/            \::::::/    / /:::/ /
//         /:::/    /              |::|    |              \::::/    / /:::/    /
//         \::/    /               |::|____|               \::/____/ \::/    /
//          \/____/                 ~~                      ~~ \/____/
// I am aqua
#include <bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define mp make_pair
#define speed                                                                  \
  ios_base::sync_with_stdio(0);                                                \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define fo                                                                     \
  for (int i = 0; i < n; i++)                                                  \
    cin >> a[i];
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define l first
#define r second
#define input                                                                  \
  .txt ifstream fin("input.txt");                                              \
  ofstream fout("output.txt");
using namespace std;
//---------------------------------------------------------------------------------------------------------------------
const int maxn = 10 + 1e2;
const int maxk = 10 + 1e5;
//---------------------------------------------------------------------------------------------------------------------
int n, m, a[maxn], dp[maxn];
//---------------------------------------------------------------------------------------------------------------------
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    cin >> a[i];
  dp[0] = 2;
  for (int i = 1; i <= m; i++) {
    bool b = false, k = false;
    for (int j = 0; j < n; j++) {
      if (i - a[j] >= 0 and (dp[i - a[j]] == 2 or dp[i - a[j]] == 0)) {
        b = true;
        break;
      }
      if (i - a[j] >= 0)
        k = true;
    }
    if (b == true) {
      dp[i] = 1;
    } else if (k == true)
      dp[i] = 2;
  }
  if (dp[m] == 0 or dp[m] == 2)
    cout << "Second";
  else
    cout << "First";
}
// I know that ;
// I know where I am
// Do not think I don't


Fixed submission:
//           _____                  _______                  _____ _____
//          /\    \                /::\    \                /\    \ /\    \
//         /::\    \              /::::\    \              /::\____\ /::\    \
//        /::::\    \            /::::::\    \            /:::/    / /::::\    \
//       /::::::\    \          /::::::::\    \          /:::/    /
//       /::::::\    \
//      /:::/\:::\    \        /:::/~~\:::\    \        /:::/    /
//      /:::/\:::\    \
//     /:::/__\:::\    \      /:::/    \:::\    \      /:::/    / /:::/__\:::\ \
//    /::::\   \:::\    \    /:::/    / \:::\    \    /:::/    / /::::\   \:::\
//    \
//   /::::::\   \:::\    \  /:::/____/   \:::\____\  /:::/    /      _____
//   /::::::\   \:::\    \
//  /:::/\:::\   \:::\    \|:::|    |     |:::|    |/:::/____/
//  /\    \ /:::/\:::\   \:::\    \
// /:::/  \:::\   \:::\____|:::|____|     |:::|____|:::|    /      /::\____/:::/
// \:::\   \:::\____\
// \::/    \:::\  /:::/    /\:::\   _\___/:::/    /|:::|____\     /:::/    \::/
// \:::\  /:::/    /
//  \/____/ \:::\/:::/    /  \:::\ |::| /:::/    /  \:::\    \   /:::/    /
//  \/____/ \:::\/:::/    /
//           \::::::/    /    \:::\|::|/:::/    /    \:::\    \ /:::/    /
//           \::::::/    /
//            \::::/    /      \::::::::::/    /      \:::\    /:::/    / \::::/
//            /
//            /:::/    /        \::::::::/    /        \:::\__/:::/    / /:::/ /
//           /:::/    /          \::::::/    /          \::::::::/    / /:::/ /
//          /:::/    /            \::::/____/            \::::::/    / /:::/ /
//         /:::/    /              |::|    |              \::::/    / /:::/    /
//         \::/    /               |::|____|               \::/____/ \::/    /
//          \/____/                 ~~                      ~~ \/____/
// I am aqua
#include <bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define mp make_pair
#define speed                                                                  \
  ios_base::sync_with_stdio(0);                                                \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define fo                                                                     \
  for (int i = 0; i < n; i++)                                                  \
    cin >> a[i];
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define l first
#define r second
#define input                                                                  \
  .txt ifstream fin("input.txt");                                              \
  ofstream fout("output.txt");
using namespace std;
//---------------------------------------------------------------------------------------------------------------------
const int maxn = 10 + 1e2;
const int maxk = 10 + 1e5;
//---------------------------------------------------------------------------------------------------------------------
int n, m, a[maxn], dp[maxk];
//---------------------------------------------------------------------------------------------------------------------
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    cin >> a[i];
  dp[0] = 2;
  for (int i = 1; i <= m; i++) {
    bool b = false, k = false;
    for (int j = 0; j < n; j++) {
      if (i - a[j] >= 0 and (dp[i - a[j]] == 2 or dp[i - a[j]] == 0)) {
        b = true;
        break;
      }
      if (i - a[j] >= 0)
        k = true;
    }
    if (b == true) {
      dp[i] = 1;
    } else if (k == true)
      dp[i] = 2;
  }
  if (dp[m] == 0 or dp[m] == 2)
    cout << "Second";
  else
    cout << "First";
}
// I know that ;
// I know where I am
// Do not think I don't