Problem p01769 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <bitset>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
#define X first
#define Y second
#define pb push_back
#define rep(X, Y) for (int(X) = 0; (X) < (Y); ++(X))
#define rrep(X, Y) for (int(X) = (Y - 1); (X) >= 0; --(X))
#define repe(X, Y) for ((X) = 0; (X) < (Y); ++(X))
#define peat(X, Y) for (; (X) < (Y); ++(X))
#define all(X) (X).begin(), (X).end()
#define rall(X) (X).rbegin(), (X).rend()

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
// template<class T> using vv=vector<vector<T>>;
template <class T> ostream &operator<<(ostream &os, const vector<T> &t) {
  os << "{";
  rep(i, t.size()) { os << t[i] << ","; }
  os << "}" << endl;
  return os;
}
template <class S, class T>
ostream &operator<<(ostream &os, const pair<S, T> &t) {
  return os << "(" << t.first << "," << t.second << ")";
}

const ll MOD = 1e9 + 7;

int main() {
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(0);
  int i, j, k;
  int n, l;
  cin >> n >> l;
  vector<ll> dp[2], x(n), a(n);
  rep(i, n) cin >> x[i];
  rep(i, n) cin >> a[i];
  rep(i, 2) dp[i].resize(l + 1);
  dp[0][0] = 1;
  // cout<<dp[0];
  rep(i, n) {
    ll sum = 0, val = 0;
    fill(all(dp[1 - i % 2]), 0ll);
    rep(j, l) {
      sum += dp[i % 2][j];
      if ((j - x[i]) % a[i] == 0) {
        dp[1 - i % 2][j + 1] = sum;
      }
    }
    // cout<<dp[1-i%2];
  }
  ll re = 0;
  rep(i, l + 1)(re += dp[n % 2][i]) %= MOD;
  cout << re << endl;
  return 0;
}

Fixed submission:
#include <algorithm>
#include <bitset>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
#define X first
#define Y second
#define pb push_back
#define rep(X, Y) for (int(X) = 0; (X) < (Y); ++(X))
#define rrep(X, Y) for (int(X) = (Y - 1); (X) >= 0; --(X))
#define repe(X, Y) for ((X) = 0; (X) < (Y); ++(X))
#define peat(X, Y) for (; (X) < (Y); ++(X))
#define all(X) (X).begin(), (X).end()
#define rall(X) (X).rbegin(), (X).rend()

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
// template<class T> using vv=vector<vector<T>>;
template <class T> ostream &operator<<(ostream &os, const vector<T> &t) {
  os << "{";
  rep(i, t.size()) { os << t[i] << ","; }
  os << "}" << endl;
  return os;
}
template <class S, class T>
ostream &operator<<(ostream &os, const pair<S, T> &t) {
  return os << "(" << t.first << "," << t.second << ")";
}

const ll MOD = 1e9 + 7;

int main() {
  ios_base::sync_with_stdio(false);
  cout << fixed << setprecision(0);
  int i, j, k;
  int n, l;
  cin >> n >> l;
  vector<ll> dp[2], x(n), a(n);
  rep(i, n) cin >> x[i];
  rep(i, n) cin >> a[i];
  rep(i, 2) dp[i].resize(l + 1);
  dp[0][0] = 1;
  // cout<<dp[0];
  rep(i, n) {
    ll sum = 0, val = 0;
    fill(all(dp[1 - i % 2]), 0ll);
    rep(j, l) {
      (sum += dp[i % 2][j]) %= MOD;
      if (a[i] && j > x[i] && (j - x[i]) % a[i] == 0 || j == x[i]) {
        dp[1 - i % 2][j + 1] = sum;
      }
    }
    // cout<<dp[1-i%2];
  }
  ll re = 0;
  rep(i, l + 1)(re += dp[n % 2][i]) %= MOD;
  cout << re << endl;
  return 0;
}