During compaction we merge all allocated partitioned and in that way get single continuous free block.so in that way we somehow dealt with inefficient use of memory and yes As now there is no free space between allocated processes so external fragmentation is reduced.
C is irrelevant to variable memory allocation scheme and compaction.
We certainly reduced memory wastage by compaction But saying 'minimal' is absurd ..
So A is the correct available answer.
the thing we have to know is Compaction is not a good thing to follow to reduce fragmentation because it causes high copying overhead , which is never preferable.