MarioLANG, 259 249 242 240240 235 bytes
+>+>)+)+)+++)++++((((-[!)+.).+++++++>->.
+"+"===================#+".")
+++.!((+++++++++)++++++)<.(---+
++=#===================")---.
++((+++++++++++++++.-(.)).+++.------.--+++++++.<---
!+======================---
=#>++++++++++++++.)+
+"+"===================#=================================================================.
+++.-!((+++++++++)++++++)<
++=#==================="
++
>!
=# =======================#=#
Finally, I wanted to make use of the wasted space in front of the loop, so I added a bunch of elevators to make use of the vertical space there.
Oh and And then there's a little trick atI realised that I could fold the end ofcode after the main rowloop (see previous revision) below the loop to make use of some more vertical space, which saves twosaved five more bytes.
Note: This solver assumes that the linear code after the loop is all on the top line, and the above code is that solution folded up. There might be a shorter overall solution by making the solver aware of the folding, because now I get 3 more +s in the first part for free, and the next 4 instructions would cost only 1 byte instead of 2.