Fernando, who put on 79 runs with Dhananjaya de Silva (44) for the third wicket, changed gears after raising his half-century and took the attack to the opposition with the left-handed Asalanka.

The 23-year-old reached his third ODI ton with a single, raising his bat and punching the air amid a standing ovation from the Sri Lankan dressing room.

Fernando finally fell to Tabraiz Shamsi's left-arm wrist-spin, having hit 10 fours and two sixes in his 115-ball knock.

Kagiso Rabada got Asalanka caught behind after the batsman's second ODI half-century in his sixth match. Rabada took two wickets.

Earlier Sri Lanka were off to a brisk start with Fernando and wicketkeeper-batsman Minod Bhanuka getting 57 runs for the opening wicket.

Aiden Markram bowled Bhanuka for 27 with his off spin while Maharaj sent back Bhanuka Rajapaksa for nought as two wickets fell in the space of five balls.

The limited-overs series, which also includes three Twenty20 matches, is being played behind closed doors due to the coronavirus pandemic.

Read more from Cricket