#include <bits/stdc++.h>   struct City {     long long g;     long long w;     long long gf;     long long bg;     long long minbg;   };   class Data {    public:     City cities[100000];     int n;     int k;     long long gifts;     long long gas;     long long nextGas;     int maxL;     City* end;     City* head;     City* tail;     City* start;     City* finish;     City* lastMinBackwardGasCity;     City* firstMinBackwardGasCity;     void init() {       std::streambuf* sbuf = std::cin.rdbuf();       auto getCinValue = [=]() -> long long {         long long retVal = 0;         int ch =    ;         while (ch ==     || ch ==   r  || ch ==   n ) ch = sbuf->sbumpc();         while (ch >=  0  && ch <=  9 ) {           retVal = retVal * 10 + ch -  0 ;           ch = sbuf->sbumpc();         }         return retVal;       };       n = getCinValue();       k = getCinValue();       for (int i = 0; i < n - 1; i++) cities[i].w = getCinValue();       for (int i = 0; i < n; i++) cities[i].g = getCinValue();       end = cities + n;       head = cities;       tail = cities;       start = cities;       finish = cities;       lastMinBackwardGasCity = cities;       firstMinBackwardGasCity = cities;       gifts = k;       gas = 0;       nextGas = 0;       maxL = 1;     }   };   struct Result {     City* start;     City* finish;     int length() { return finish - start + 1; }   };   void backCount(City* city, Data& data) {     if (city == data.tail) {       city->bg = city->minbg = 0;       data.firstMinBackwardGasCity = data.lastMinBackwardGasCity = data.tail;     } else {       city->bg = (city - 1)->bg + (city - 1)->w - city->g - city->gf;       if (city->bg < (city - 1)->minbg) {         city->minbg = city->bg;         data.firstMinBackwardGasCity = city;         data.lastMinBackwardGasCity = city;       } else if (city->bg == (city - 1)->minbg) {         city->minbg = city->bg;         data.lastMinBackwardGasCity = city;       } else         city->minbg = (city - 1)->minbg;     }   };   void backRecountAll(Data& data) {     for (City* city = data.tail; city < data.head; city++) backCount(city, data);   };   bool backCheck(City* city, long long gifts, Data& data) {     if (gifts + city->g >= (city - 1)->bg - (city - 1)->minbg + (city - 1)->w) {       int l = city - data.tail + 1;       if (l > data.maxL) {         data.maxL = l;         data.start = data.tail;         data.finish = city;         return true;       }     }     return false;   };   long long backCheckAll(Data& data) {     long long gifts_ = data.gifts;     long long minGiftsDeficit = 9223372036854775807LL;     for (City* city = data.head;          city > (((data.tail) > (data.tail + data.maxL - 1))                      ? (data.tail)                      : (data.tail + data.maxL - 1));          city--) {       gifts_ += city->gf;       long long giftsLeft =           gifts_ + city->g - ((city - 1)->bg - (city - 1)->minbg + (city - 1)->w);       if (giftsLeft >= 0) {         data.maxL = city - data.tail + 1;         data.start = data.tail;         data.finish = city;         break;       } else         minGiftsDeficit = (((minGiftsDeficit) < (-giftsLeft)) ? (minGiftsDeficit)                                                               : (-giftsLeft));     }     return minGiftsDeficit;   };   Result testData(Data& data) {     while (1) {       while (data.head < data.end - 1) {         long long g = data.head->g;         long long w = data.head->w;         long long gf = 0;         data.nextGas = (data.head == data.end - 1) ? (-9223372036854775807LL - 1)                                                    : data.gas + g - w;         if (data.nextGas >= 0) {           data.gas = data.nextGas;           data.head->gf = gf = 0;           data.nextGas = 0;         } else if (data.gifts >= -data.nextGas) {           data.head->gf = gf = -data.nextGas;           data.gifts += data.nextGas;           data.gas = 0;           data.nextGas = 0;         } else           break;         backCount(data.head, data);         data.head++;         backCheck(data.head, data.gifts, data);       }       long long minGiftsDeficit = 0;       while (data.tail < data.head) {         if (data.k < -data.nextGas && data.head - data.tail + 1 <= data.maxL)           break;         if (data.head - data.tail + 1 <= data.maxL) {           while (!data.tail->gf) data.tail++;         }         while (!data.tail->gf && data.tail->w <= (data.tail + 1)->g) data.tail++;         if (long long tailGifts = data.tail->gf) {           data.gifts += tailGifts;           data.tail->gf = 0;           data.tail++;           minGiftsDeficit -= tailGifts;           if (minGiftsDeficit <= 0) minGiftsDeficit = backCheckAll(data);         } else {           data.tail++;           long long gas_ = 0;           bool gasChanged = true;           for (City* city = data.tail; city < data.head; city++) {             gas_ += city->g + city->gf - city->w;             if (gas_ <= 0 && city->gf) {               data.gifts += gas_;               city->gf -= gas_;               gas_ = 0;               gasChanged = false;               break;             } else if (gas_ < 0) {               data.gifts += gas_;               city->gf = -gas_;               gas_ = 0;             }           }           if (gasChanged) data.gas = gas_;           while (data.gifts < 0) {             data.head--;             data.gas -= data.head->g + data.head->gf - data.head->w;             data.gifts += data.head->gf;             data.head->gf = 0;             data.head->bg = 0;             data.head->minbg = 0;             minGiftsDeficit = 0;           }           data.nextGas = data.gas + data.head->g - data.head->w;           if (data.head <= data.firstMinBackwardGasCity) {             backRecountAll(data);             minGiftsDeficit = backCheckAll(data);           } else if (data.head <= data.lastMinBackwardGasCity)             while (data.lastMinBackwardGasCity->bg !=                    data.lastMinBackwardGasCity->minbg)               data.lastMinBackwardGasCity--;         }         if (data.tail == data.head) break;         if (data.tail > data.lastMinBackwardGasCity) {           backRecountAll(data);           minGiftsDeficit = backCheckAll(data);         } else if (data.tail > data.firstMinBackwardGasCity)           while (data.firstMinBackwardGasCity->bg !=                  data.firstMinBackwardGasCity->minbg)             data.firstMinBackwardGasCity++;         if (data.head == data.end - 1) {           if (data.maxL >= data.head - data.tail + 1) break;         } else if (data.gifts >= -data.nextGas) {           data.head->gf = -data.nextGas;           data.gifts -= -data.nextGas;           data.gas = 0;           data.nextGas = 0;           backCount(data.head, data);           data.head++;           backCheck(data.head, data.gifts, data);           break;         }       }       if (data.k < -data.nextGas && data.head - data.tail + 1 <= data.maxL) {         data.head++;         data.tail = data.head;       }       if (data.tail == data.head) {         data.tail = data.head;         data.firstMinBackwardGasCity = data.head;         data.lastMinBackwardGasCity = data.head;         data.gifts = data.k;         data.gas = 0;         data.nextGas = 0;       }       if (data.maxL >= data.end - data.tail) break;     }     return {data.start, data.finish};   }   int test() {     static Data data;     data.init();     Result result = testData(data);     return result.length();   }   int main() { std::cout << test(); }