Mahmudullah’s hundred went in vain — he scored a run-a-ball 111 runs — as Bangladesh sunk to 10th on the table with a poorer run-rate than England, albeit equal on two points.
Opting to bat, South Africa lost opener Reeza Hendricks for 12 runs, and then Raasie van der Dussen also fell lbw to Mehidy Hasan Miraz (1-44).
The Proteas were down to 36-2 in 7.5 overs in good batting conditions. Stand-in skipper Aiden Markram and de Kock then added 131 runs for the third wicket.
It was a crucial partnership and set the base for South Africa’s late onslaught. De Kock reached 50 off 47 balls, while Markram got to 50 off 57 balls. Their 100-run stand came off 107 balls.
De Kock then reached his hundred off 107 balls. Unlike his past two centuries in this tournament, he bedded for a longer knock this time scoring another 74 runs off only 33 balls.
Against the run of play, Shakib had Markram caught at long off to get the breakthrough in the 31st over. It only invited more carnage: Klaasen and de Kock smacked 142 runs off only 87 balls to take South Africa past 300 in 44 overs.
While Klaasen reached 50 off 34 balls, De Kock fell four runs short of his highest score in ODIs — 178 against Australia in 2016.
Klaasen fell 10 short of a hundred even as David Miller smacked 34 not out off 15 balls at the other end. They added 65 runs off just 25 balls with South Africa plundering 144 runs in the last 10 overs.
The Proteas already boasted the two highest totals in the tournament — 428-5 against Sri Lanka and 399-7 against England — and added a third today.
In reply, Bangladesh collapsed to 81-6 in 22 overs and its chase never took off.
Jansen struck twice early on to send back opener Tanzid Hasan (12) and Najmul Hossain Shanto for a golden duck. Both were caught behind off successive deliveries in the seventh over, with Klaasen keeping wickets as de Kock was suffering from cramps.
Litton Das scored 22 off 44 balls — the highest among Bangladesh’s top five batsmen. He was out lbw to Rabada in the 15th over.
Lizaad Williams had Shakib caught behind for one, while Coetzee sent back veteran batsman Mushfiqur Rahim for eight runs.
Mahmudullah resisted with 50 off 67 balls, adding 41 runs with Nasum Ahmed (19) and another 37 runs with Hasan Mahmud (15).
His century came off 104 balls, adding another 68 off 56 balls with Mustafizur Rahman (11). Mahmudullah hit 11 fours and four sixes in all.
His knock helped Bangladesh delay the inevitable, and more importantly, avoid embarrassment as England’s loss to South Africa by 229 runs stayed the largest margin of defeat in this tournament.
Bangladesh have the privilege of facing the team that smashed 399 in their previous game - and at the venue they did it too, as they take on South Africa.