That's correct! The formula is pretty simple, although you might not have seen this type of formula before:
=IFERROR(INDEX($C:$C,AGGREGATE(15,6,ROW($C$2:$C$50)/($D$2:$D$50=$G$1)/($A$2:$A$50=$F$4),(ROWS($F$5:$F5)-1)*3+COLUMNS($F5:F5))),"")
We start with the row numbers of the countries. We'll get an array of 49 row numbers.
=IFERROR(INDEX($C:$C,AGGREGATE(15,6,ROW($C$2:$C$50)/($D$2:$D$50=$G$1)/($A$2:$A$50=$F$4),(ROWS($F$5:$F5)-1)*3+COLUMNS($F5:F5))),"")
Now we divide those row numbers by ($D$2:$D$50=$G$1) which gives us an array of TRUE/FALSE values based on whether column D has the same value as G1. When computing with TRUE/FALSE values, Excel treats TRUE as 1, and FALSE as 0. So once we divide the 1/0 into the row number, we'll either get the row number again, or a #DIV/0 error. We then repeat with the green section, checking for the season in column A. After that, we're left with an array of row numbers that match our conditions, or #DIV/0 errors.
At this point, AGGREGATE kicks in. the 15 means SMALL, and the 6 means ignore errors. So if we can create a counter from 1 to n, we can extract just the row numbers. The (ROWS($F$5:$F5)-1)*3+COLUMNS($F5:F5) part does that. The ROWS counts how many rows we've done so far, and we multiply by the number of columns we want (3 in this case, but 8 works as you expect), and add in the number of columns. This creates a counter from 1-n, progressing by columns first, then down by rows. So each cell in your output table gives a different value to AGGREGATE (SMALL) and gets a different row number, which then goes to INDEX to get it.
The IFERROR kicks in when the counter exceeds the number of matching rows.
Hope this helps!