#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; #define rep(i,n) for (int i=0;i-1;i--) #define pb push_back #define all(x) (x).begin(), (x).end() template using vec = vector; template using vvec = vec>; template using vvvec = vec>; using ll = long long; using pii = pair; using pll = pair; template bool chmin(T &a, T b){ if (a>b){ a = b; return true; } return false; } template bool chmax(T &a, T b){ if (a T sum(vec x){ T res=0; for (auto e:x){ res += e; } return res; } template void printv(vec x){ for (auto e:x){ cout< ostream& operator<<(ostream& os, const vec& A){ os << "{"; rep(i,A.size()){ os << A[i]; if (i!=A.size()-1){ os << ' '; } } os<<"}"; return os; } template ostream& operator<<(ostream& os, const pair& A){ os << "(" << A.first <<", " << A.second << ")"; return os; } template ostream& operator<<(ostream& os, const deque& A){ os << "deque({"; rep(i,A.size()){ os << A[i]; if (i!=A.size()-1){ os << ' '; } } os<<"})"; return os; } int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int T; cin>>T; while (T--){ int N,M; cin>>N>>M; vec A(N+1); rep(i,N){cin>>A[i+1];} vec B(N+1); B[0] = M; string ans = "Yes"; rep(i,N){ if (B[i] < A[i+1]-B[i+1]){ //cout << A << B << endl; ans = "No"; break; } int p = A[i+1] - B[i+1]; B[i+1] += p; if (i!=N-1){ B[i+2] += B[i] - p; if (B[i+2] > A[i+2]){ //cout << A << B << endl; ans = "No"; break; } } else{ if (B[i]-p!=0){ //cout << A << B << endl; ans = "No"; break; } } B[i] = 0; } cout << ans << endl; } }