Harare: Faf du Plessis hit his third century in four games as South Africa beat Zimbabwe by 63 runs on Thursday to book a date with Australia in the triangular series final.
South Africa will meet Australia at the same venue in the final on Saturday.
Faf 121 carried the Proteas to 271 for 6 after they were put in to bat, before JP Duminy picked up three wickets as Zimbabwe were bowled out for 208.
Zimbabwe had to chase down their target in 25.2 overs if they were going to gain a bonus point and improve their net run rate sufficiently to knock South Africa out, but didn't even come close to winning with Brendan Taylor's 79 the only score of note.
Earlier, Du Plessis hit his third century in four games as he carried South Africa to a solid total. Du Plessis paced his innings superbly on another turning pitch to score 121 from 140 deliveries, which allowed the Proteas to recover from the early loss of their openers.
The No. 3 batsman only scored his maiden one-day hundred last Wednesday against Australia, but followed it up with 126 against the same opposition in a losing cause on Tuesday before adding a third century on Thursday.
Although the game began promisingly for Zimbabwe after they won the toss and inserted South Africa before reducing them to 26 for 2, Du Plessis added 70 for the third wicket with Rilee Rossouw.
While Rossouw was bowled for 36 by left-arm spinner Sean Williams and AB de Villiers was run out in bizarre circumstances when John Nyumbu dropped a return catch onto the stumps at the non-striker's end, a savvy 103-run stand between Du Plessis and Duminy put the Proteas back on track.
As Zimbabwe's spinners whirled away, the pair manoeuvred a succession of ones and twos to set the innings up for a big push at the end. Although both batsmen departed attempting big shots, with Duminy out for 51, the Proteas added 61 in the last five overs to leave Zimbabwe with a huge task.
Earlier, Zimbabwe won the toss and opted to bowl.
Two changes for Zimbabwe -- Vusi Sibanda and Neville Madziva in for Tino Mawoyo and Donald Tiripano.
South Africa bring in Rilee Rossouw and Wayne Parnell for Imran Tahir and an injured Ryan McLaren.
Teams:
Zimbabwe: 1. Vusi Sibanda, 2. Sikandar Raza, 3. Hamilton Masakadza, 4. Brendan Taylor (wk), 5. Sean Williams, 6. Elton Chigumbura (Capt.), 7. Malcolm Waller, 8. Prosper Utseya, 9. Neville Madziva, 10. John Nyumbu, 11. Tendai Chatara
South Africa: 1. Hashim Amla, 2. Quinton de Kock (wk), 3. Faf du Plessis, 4. AB de Villiers (Capt.), 5. Jean-Paul Duminy, 6. David Miller, 7. Rilee Rossouw, 8. Aaron Phangiso, 9. Dale Steyn, 10. Morne Morkel, 11. Wayne Parnell
Brief scores
South Africa - 271/6 (du Plessis 121, Duminy 51, Madziva 2-53)
Zimbabwe - 208 (Taylor 79, Duminy 3-35)
Result - South Africa won by 63 runs
Points - South Africa 5, Zimbabwe 0
MOM - Faf du Plessis (South Africa)