Well, to accept @holch's challenge.
And of course it is a solution only using Expression Manager.
Javascript is Tony's part, EM mine.
It is easy to calculate the number of each item selected.
A hidden question of type "multiple numeric" ("MN") and a hidden question of type equation to calculate and fill the subquestions.
{MN_SQ001=countif("01",Q1_SQ001,Q2_SQ001,Q3_SQ001,Q4_SQ001,...)}{MN_SQ002=countif("02",Q1_SQ001,Q2_SQ001,Q3_SQ001,Q4_SQ001,...)}{MN_SQ003=countif("03",Q1_SQ001,Q2_SQ001,Q3_SQ001,Q4_SQ001,...)}
{MN_SQ004=countif("04",Q1_SQ001,Q2_SQ001,Q3_SQ001,Q4_SQ001,...)}
...
Now you know how many times item "XX" was selected "Meest".
Next equation ("eqMax1") to find the maximum:
{max(that.MN)}
Next equation:
Join all codes that match this maximum
{join(if(MN_SQ001==eqMax1,'A',''),if(MN_SQ002==eqMax1,'B',''),if(MN_SQ003==eqMax1,'C',''),if(MN_SQ004==eqMax1,'D',''),if(MN_SQ005==eqMax1,'E',''),if(MN_SQ006==eqMax1,'F',''),if(MN_SQ007==eqMax1,'G',''),if(MN_SQ008==eqMax1,'H',''),if(MN_SQ009==eqMax1,'I',''),if(MN_SQ010==eqMax1,'J',''),if(MN_SQ011==eqMax1,'K',''),if(MN_SQ012==eqMax1,'L',''))}
To have a randomization if there are ties, you may create a random number (1-2) and reverse this string (function "strrev) if randnumber==2.
To be able to do this I used letters.
Do the same for the second max and the third.
{max(if(MN_SQ001 lt eqMax1, MN_SQ001, 0), if(MN_SQ002 lt eqMax1, MN_SQ002, 0), if(MN_SQ003 lt eqMax1, MN_SQ003, 0), if(MN_SQ004 lt eqMax1, MN_SQ004, 0), if(MN_SQ005 lt eqMax1, MN_SQ005, 0), if(MN_SQ006 lt eqMax1, MN_SQ006, 0), if(MN_SQ007 lt eqMax1, MN_SQ007, 0), if(MN_SQ008 lt eqMax1, MN_SQ008, 0), if(MN_SQ009 lt eqMax1, MN_SQ009, 0), if(MN_SQ010 lt eqMax1, MN_SQ010, 0), if(MN_SQ011 lt eqMax1, MN_SQ011, 0), if(MN_SQ012 lt eqMax1, MN_SQ012, 0))}
Join all strings and use the first three letters to find your three most often selected items.
Later you will get an example.
Joffm