#include <bits/stdc++.h>
using namespace std;
namespace {
#pragma GCC diagnostic ignored "-Wunused-function"
using ll = long long int;
using ld = long double;
using vi = vector<int>;
using vvi = vector<vi>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using vll = vector<ll>;
template <typename T>
using minpq = priority_queue<T, vector<T>, greater<T>>;
template <typename U, typename V>
ostream& operator<<(ostream& s, const pair<U, V>& x) {
  s << "(" << x.first << ", " << x.second << ")";
  return s;
}
template <typename U>
ostream& operator<<(ostream& s, const vector<U>& x) {
  s << "[";
  bool was = false;
  for (auto it : x) {
    if (was) s << ", ";
    was = true;
    s << it;
  }
  s << "]";
  return s;
}
template <typename U>
ostream& operator<<(ostream& s, const deque<U>& x) {
  s << "[";
  bool was = false;
  for (auto it : x) {
    if (was) s << ", ";
    was = true;
    s << it;
  }
  s << "]";
  return s;
}
template <typename U, typename V>
ostream& operator<<(ostream& s, const map<U, V>& x) {
  s << "{";
  bool was = false;
  for (auto it : x) {
    if (was) s << ", ";
    was = true;
    s << it;
  }
  s << "}";
  return s;
}
template <typename U>
ostream& operator<<(ostream& s, const set<U>& x) {
  s << "{";
  bool was = false;
  for (auto it : x) {
    if (was) s << ", ";
    was = true;
    s << it;
  }
  s << "}";
  return s;
}
template <typename U>
ostream& operator<<(ostream& s, const multiset<U>& x) {
  s << "{";
  bool was = false;
  for (auto it : x) {
    if (was) s << ", ";
    was = true;
    s << it;
  }
  s << "}";
  return s;
}
ll expmod(ll a, ll b, ll mod) {
  ll res = 1;
  a %= mod;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
template <typename T>
T sqr(const T& x) {
  return x * x;
}
ll flog(const ll x) { return 63 - __builtin_clzll(x); }
template <typename T>
void sort(T& t) {
  sort(begin(t), end(t));
}
template <typename T>
void undupe(vector<T>& v) {
  sort(v);
  v.erase(unique(begin(v), end(v)), v.end());
}
template <typename T>
string binary(T x, int w = 8 * sizeof(T)) {
  string r;
  for (int i = 0; i < w; i++) r = (((T(1) << i) & x) ? '1' : '0') + r;
  return r;
}
}  // namespace
const ll MOD = 1000000009LL;
const ll INF = (ll)1e15;
const double EPS = 1e-8;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ll n, w;
  cin >> n >> w;
  vll a(n);
  for (auto& x : a) cin >> x;
  ll lo = 0, hi = 0;
  ll cur = 0;
  for (auto x : a) {
    cur += x;
    lo = min(lo, cur);
    hi = max(hi, cur);
  }
  ll at_least = -lo;
  ll at_most = w - hi;
  if (at_least > at_most)
    cout << 0 << endl;
  else
    cout << (at_most - at_least + 1) << endl;
}
