Problem Statement  
You've just qualified for the onsite round of a major coding tournament! You now need to sort out a visa to allow you to travel to the event. You know that this is likely to be a long process, but are determined to sort it out as quickly as possible, even if it means working day and night. The process involves filling out a series of forms, which then have to be approved by the embassy. When the last form is approved your visa is granted. The approval process is very quick (instantaneous for the purpose of this problem), but there is a catch: each form has to be approved by the embassy before they will give you the next form to fill out. The embassy opens at exactly the same time each day and remains open for openTime time units. By the nonstandard embassy clocks, a day is dayLength time units long, so the embassy then remains closed for dayLength  openTime time units before it opens the next day. Forms can be approved at any point in time between the time that the embassy opens and the time it closes, inclusive. However, if you finish filling in a form when the embassy is closed, you have to wait until it opens again before the form can be approved. The length of time it takes you to fill out form i is forms[i] units and the forms must be completed in the order they are given in forms. You already have the first form in your possession and can start filling it out at any time. Return the minimum length of time between starting to fill out the first form and getting your visa granted.  
Definition  
 
Constraints  
  forms will contain between 1 and 50 elements, inclusive.  
  Each element of forms will be between 1 and 1,000,000 (10^6), inclusive.  
  dayLength will be between 1 and 1,000,000 (10^6), inclusive.  
  openTime will be between 1 and dayLength, inclusive.  
Examples  
0)  
 
1)  
 
2)  
 
3)  
