You can create a constructed list and in combination with some skip logic, you have a solution.
Let's assume your grid question is Q1.
Create a constructed list (call it ScenarioConList) as follows ...
This constructed list should use the same parent list as the row list in your Q1 grid question (the 10 scenario's). It will select all scenario's where they were coded as 3-4-5, randomise them and trim the list down to 3 scenario's maximum.
You can use skip logic as follows ...
Examples for scenario 7:
Ask if: ListValue(ScenarioConList,1)=7 or ListValue(ScenarioConList,2)=7 or ListValue(ScenarioConList,3)=7
Another option is ...
Ask if: ListHasParentMember(ScenarioConList,7)
Just a final comment: You can apply other features in a number of ways like least fill or prioritise scenario's in situations like this.