Problem p03170 (C++)

Buggy submission (status: Runtime Error):
// ######################################## LET'S DO THIS
// #########################################################//
/*
Name: Prathamesh S
Motto: To Never Give Up
Linkedin: https://www.linkedin.com/in/prathamesh-shendarkar-1a3411172/
*/

// ####################################### Start of Macros
// ########################################################//
#include <bits/stdc++.h>
// ######################################### Containers
// ###########################################################//
#define all(v) v.begin(), v.end()
#define mem(n, m) memset(n, m, sizeof(n))
#define pii pair<int, int>
#define pll pair<long long, long long>
#define sii set<int>
#define sll set<long long>
#define vii vector<int>
#define vll vector<long long>
#define mll map<long long, long long>
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define ins insert
#define mp make_pair
#define len(s) s.length()
// ########################################### Loops
// ##############################################################//
#define loopa(i, a, b) for (i = a; i <= b; i++)
#define loop(i, n) for (i = 0; i < n; i++)
#define pool(i, n) for (i = n - 1; i >= 0; i--)
#define poop(i, a, b) for (i = a; i >= b; i--)
// ########################################## Debugging
// ###########################################################//
#define on cout << endl
#define o2(a, b) cout << a << " " << b
#define debug(a) cout << a << "\n";
#define os cout << " "
// ########################################## Ends/Bounds
// #########################################################//
#define lob lower_bound
#define upb upper_bound
#define ret return 0
// ########################################## Containers
// ##########################################################//
#define present(s, x) (s.find(x) != s.end())
#define cpresent(s, x) (find(all(s), x) != s.end())
#define ford(container, it)                                                    \
  for (__typeof(container.begin()) it = container.begin();                     \
       it != container.end(); it++)
#define fors(container, it, a, b)                                              \
  for (__typeof(container.begin()) it = a; it != b; it++)
// ############################################# Size
// #############################################################//
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);
#define mod 1000000007
#define EPSILON 1e-9
#define PI 3.14159265358979323846
#define inf 999999999999999999
#define siz 100001
#define SIZ 1000001
#define SIZE 200001
// ############################################ typedefs
// #########################################################//
typedef long long ll;
typedef long double ldo;
typedef double db;
// ########################################## End of Macros
// ######################################################//
using namespace std;

// ######################################### Start of Program
// ####################################################//
int main() {
  fastio

      ll n,
      k;
  cin >> n >> k;
  vector<ll> v(n);
  vector<ll> dp(k + 1, 0);

  for (ll i = 0; i < n; i++) {
    cin >> v[i];
    dp[v[i]]++;
  }

  // Here I need to biased and make taro win
  ll mini = *min_element(v.begin(), v.end());

  for (ll i = mini + 1; i <= k; i++) {
    if (dp[i] == 0) {
      // Here i need to check if my k is making any odd number or not with denom
      ll flag = 0;
      for (ll j = 0; j < n; j++) {
        if (dp[(i - v[j])] % 2 == 0) {
          dp[i] = dp[(i - v[j])] + 1; // This means first is the winner
          flag = 1;
          break;
        }
      }
      if (flag != 1) {
        dp[i] = dp[i - v[0]] + 1; // That means second is the winner
      }
    }
  }

  if (dp[k] % 2 == 0) {
    cout << "Second"
         << "\n";
  } else {
    cout << "First"
         << "\n";
  }
}

/*

*/
// ######################################### End of Program
// ######################################################//

Fixed submission:
// ######################################## LET'S DO THIS
// #########################################################//
/*
Name: Prathamesh S
Motto: To Never Give Up
Linkedin: https://www.linkedin.com/in/prathamesh-shendarkar-1a3411172/
*/

// ####################################### Start of Macros
// ########################################################//
#include <bits/stdc++.h>
// ######################################### Containers
// ###########################################################//
#define all(v) v.begin(), v.end()
#define mem(n, m) memset(n, m, sizeof(n))
#define pii pair<int, int>
#define pll pair<long long, long long>
#define sii set<int>
#define sll set<long long>
#define vii vector<int>
#define vll vector<long long>
#define mll map<long long, long long>
#define ff first
#define ss second
#define pb push_back
#define pf push_front
#define ins insert
#define mp make_pair
#define len(s) s.length()
// ########################################### Loops
// ##############################################################//
#define loopa(i, a, b) for (i = a; i <= b; i++)
#define loop(i, n) for (i = 0; i < n; i++)
#define pool(i, n) for (i = n - 1; i >= 0; i--)
#define poop(i, a, b) for (i = a; i >= b; i--)
// ########################################## Debugging
// ###########################################################//
#define on cout << endl
#define o2(a, b) cout << a << " " << b
#define debug(a) cout << a << "\n";
#define os cout << " "
// ########################################## Ends/Bounds
// #########################################################//
#define lob lower_bound
#define upb upper_bound
#define ret return 0
// ########################################## Containers
// ##########################################################//
#define present(s, x) (s.find(x) != s.end())
#define cpresent(s, x) (find(all(s), x) != s.end())
#define ford(container, it)                                                    \
  for (__typeof(container.begin()) it = container.begin();                     \
       it != container.end(); it++)
#define fors(container, it, a, b)                                              \
  for (__typeof(container.begin()) it = a; it != b; it++)
// ############################################# Size
// #############################################################//
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);
#define mod 1000000007
#define EPSILON 1e-9
#define PI 3.14159265358979323846
#define inf 999999999999999999
#define siz 100001
#define SIZ 1000001
#define SIZE 200001
// ############################################ typedefs
// #########################################################//
typedef long long ll;
typedef long double ldo;
typedef double db;
// ########################################## End of Macros
// ######################################################//
using namespace std;

// ######################################### Start of Program
// ####################################################//
int main() {
  fastio

      ll n,
      k;
  cin >> n >> k;
  vector<ll> v(n);
  vector<ll> dp(k + 1, 0);

  for (ll i = 0; i < n; i++) {
    cin >> v[i];
    dp[v[i]]++;
  }

  // Here I need to biased and make taro win
  ll mini = *min_element(v.begin(), v.end());

  for (ll i = mini + 1; i <= k; i++) {
    if (dp[i] == 0) {
      // Here i need to check if my k is making any odd number or not with denom
      ll flag = 0;
      for (ll j = 0; j < n; j++) {
        if (i - v[j] > 0 && dp[(i - v[j])] % 2 == 0) {
          dp[i] = dp[(i - v[j])] + 1; // This means first is the winner
          flag = 1;
          break;
        }
      }
      if (flag != 1) {
        dp[i] = dp[i - v[0]] + 1; // That means second is the winner
      }
    }
  }

  if (dp[k] % 2 == 0) {
    cout << "Second"
         << "\n";
  } else {
    cout << "First"
         << "\n";
  }
}

/*

*/
// ######################################### End of Program
// ######################################################//