This is a good use case for InfoPath. IP has "rules" that enable to do things like enable/disable or show/hide fields based on a condition, or make fields required based on a condition. So you could put fields l, m, and s in a section, and configure the section to only be visible when the form has a certain status (the status would be a field set up in the form that would change for each step of the workflow). Those fields could also be marked to be required only when the status is a certain value.
You could do all of the above with SPD, but that would require javascript or XSL. The XSL might not be too bad in SPD 2010, but when you migrate to 2013, maintinging this form would become far more difficult. So I'd go the infopath route.
edit: Another, easier option I should have mentioned earlier is to use list validation. This is found in list settings --> validation settings. You can configure simple expressions, like [amount]>0, or you can use if statements. For example:
=IF([stage]="submitted",if([somefield]<>"",true,false),true)
In the above, if the stage field has a value of "submitted", then it checks the value of "somefield". If somefield is not empty, then the validation passes (true), else the validation fails (false). if the stage wasn't "submitted", then the validation passes (the last true).
An additional option would be to customize the editform.aspx page, and add javascript to conditionally make the field required.