#nullable enable #region var _input = Array.Empty(); var _iter = 0; string String() { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return _input[_iter++]; } T I() where T : IParsable => T.Parse(String(), null); #endregion T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); bool Ans() { var n = I(); var az = Range(n + 1, I); var mi = -1; for (var i = n; i > 0; i--) if (az[i] > 0) { mi = i; break; } if (mi < 0) return true; long a1 = az[1]; if (mi == 1) return a1 % 2 == 0 || a1 > n; az[mi]--; long max = mi; var min = max; for (long i = mi; i >= 2; i--) { max += i * az[i]; min += i * (az[i] - 2); } if (a1 - min > n) return true; if ((a1 - min) % 2 != 0) return false; return min <= a1 && a1 <= max; } Console.WriteLine(Ans() ? "Yes" : "No");