DFSORT only uses the first volume of multivolume work data sets, so the SYSDA,20 you used for each SORTWKnn is actually equivalent to SYSDA,1. The ICE046A message tells you that 4 SORTWKdd data sets is not enough. You could add more SORTWKdd data sets - how many you need depends on the number of records in your input file and their length. You can specify up to 255 SORTWKdd data sets.
Alternatively, you could remove all of the SORTWKdd data sets and let DFSORT allocate the needed work space dynamically. The FILSZ parameter is generally not needed since DFSORT can usually determine the file size automatically. In the few cases where it is needed (e.g. an E15 exit supplies all of the input records), you can specify the approximate number of records (x) as follows:
//DFSPARM DD *
DFSORT will use your installation's default for the maximum number of work data sets to dynamically allocate. If appropriate, you can increase that maximum (n) as follows: