The first new arrayed object does not appear until the associated parameter length is equal to 2X the column offset of the given array action.
When equipped with that knowledge you can see exactly why your block is not working the way you would like. If the associated parameter starts at the object to be arrayed, then each new arrayed object will always appear when the associated parameter is an extra column offset beyond the final arrayed object. If the column offset is 400, then the first new arrayed object will be 400 units beyond the start point but will not appear until the associated parameter is equal to 800 units. The next arrayed object will appear at 800 units when the associated parameter is equal to 1200 units, etc...
If you want each new arrayed object to appear at the location of the grip when the column offset of a given array action is reached, then the solution is fairly simple. Add a chained linear parameter to associate with the array action. Make the length of that chained linear parameter so that it is equal to the column offset when at the object to be arrayed. Stretch that chained linear parameter with the parameter showing the grip. Do that for each array.
In the attached file I fixed the 50 and 100 states. You should be able to complete the remainder using those two states as examples. Let me know if you have further questions.