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.
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:
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).