The biggest challenge you face is the fact that the number of entries to randomize is variable. C requires more effort with managing variable structures, and that's probably the real intent of the exercise.
You should also consider the input structure as well as an output structure.
One approach to solving this is to take in all the inputs, placing them in an array or similar structure while they are read in. You can then randomly select entries from that input array and either push them to the output structure or push them to the output device. This gives a randomization of the input values along with a potential randomization of their output location.
Another approach would be to push the input values to their randomly selected output structure as they are provided. This only provides a randomization of their output location, and a modest appearance of randomization to their input.
A 25+ entry array would be just as good of a place to start with on the input structure. It's also pretty easy to tap based upon the index.
A simply 3x9 array would be a good starting point to consider for storing the results. You could also use 3 separate arrays for storing the results. Honestly, I'm not sure there's an advantage either way. If you had additional requirements on the output, that might affect the structures.
A final aspect to consider is input array overflow (ie too many values being provided) as well as handling too many entries into a given "column" of the output structure. It's possible that one column will fill up before the others. What limits do you want to place on how many entries each column can have?
Now my question is not for the code that defeats the object of me attempting the exercise
. What you're really asking about is what sort of structures should or could be used.