I think you may have misdefined your problem.
You have 10 sessions each with 20 spaces.
A participant has to register for 3 sessions.
The maximum number of partipants is 66.
Participant array
n by 3
If the participant has 3 available sessions he is registered, otherwise waiting list.
Problem is filling the sessions, if there is dropouts, after the sessions start.
Session Array
10 by 20
Actually the problem is "stupid". The content of the sessions are assumed equal. But a last session for an early participant could be the first for another. Unless the is no interaction between participants, like using computers in a lab. Also, rescheduling if there are dropouts or changes, assume that the people would be waiting around to be called. What if their initial choices have passed?
You only need 10 check boxes, no need to group them by day.
You don't need that many if's, just loop through the choices and sessions.
There should not be any conflicts for the first 20, wait listing is the problem, because the early sessions would more likely be filled first.
It may be easier, if you allowed for the entry of alternate sessions or real time entry that would only allow signing for available empty sessions.
It would be better to program delete and change.