3:00 AM ET

Innings India 307 and 0 for 0 need another 287 to beat South Africa 335 and 258 (de Villiers 60, Elgar 61, Shami 4-49, Bumrah 3-70)
Live scorecard and ball-by-ball details

A four-wicket haul from Mohammed Shami enabled India to bowl South Africa out for 258 in their second innings, leaving them chasing a target of 287 with the best of four sessions left to play in the Centurion Test. Shami's key intervention came when he took three wickets in a seven-over spell before lunch, to bring India back into the match after AB de Villiers and Dean Elgar had put on 141 for the third wicket.

Jasprit Bumrah and Ishant Sharma were also among the wickets, finishing with 5 for 110 between them, while R Ashwin toiled wicketless for 29.2 overs before ending the innings by getting last man Lungi Ngidi caught in the deep.

Low bounce had been the biggest threat for batsmen on the third day, when Bumrah had removed Aiden Markram and Hashim Amla with shooters pitching short of a good length. He got one to keep low in the fourth over of the fourth morning as well, but this time the line was just outside off stump and de Villiers breathed a sigh of relief.

Conditions otherwise seemed reasonably good to bat in, and with India also offering de Villiers release balls every now and then - width the most frequent culprit - South Africa's lead was beginning to trouble India, and their worries were compounded by Elgar's stay. He never looked comfortable at the crease, particularly against Ashwin's offspin but kept fighting cussedly, bringing up his half-century with a drive through extra-cover off Ishant.

The breakthrough arrived thanks to extra bounce, Shami getting one to rear at de Villiers in the corridor to find a bit of glove through to Parthiv Patel. Then, Shami dropped one short to Elgar, who had pulled a similar ball to the boundary at the start of his spell, but this time he hit it in the air and within range of KL Rahul patrolling the square-leg boundary.

Ashwin, who kept getting the ball to dip into awkward areas and turn sharply, nearly had a wicket in the over after Elgar's dismissal. Faf du Plessis, stretching forward, failed to get to the pitch of an offbreak and flicked it in the air. Rahul, diving full-length to his right at leg gully, only got his fingertips to it.

There was more frustration waiting for India in the next over. Shami kept hitting a good length outside off stump, and finding just a bit of seam movement. De Kock, seemingly unaware of the option of leaving the ball, kept throwing his hands at it. Three successive edges flew to the boundary, two wide of the slips and one just beyond Parthiv's reach as he dived to his left. The next ball produced another poke from de Kock; this time, it was close enough to Parthiv for him to take the catch.

The game had rattled along in the morning session; it nearly came to a standstill after tea, with both sides sitting back and waiting for a mistake from the other. It was understandable, given how delicately poised the Test match was. Bowling in tandem, Hardik Pandya and Ishant kept bowling just short of a good length, often sending down cutters, and conceded only 14 runs in 11 overs, discomfiting both du Plessis and Vernon Philander with movement or inconsistent bounce but without creating a chance.

It took a short, harmless-looking ball to end the seventh-wicket partnership at 46, Philander unbalanced on the pull and caught at square leg. Then, in his next over, Ishant got one to lift unexpectedly in the fifth-stump channel, and Keshav Maharaj nicked to Parthiv off the shoulder of the bat.

Du Plessis remained at the crease, forever a thorn in India's flesh; when he pulled the returning Shami for four off the last ball before tea, he had moved to 37 off 122 balls. He survived a dropped chance on 46 when Bumrah put down a return catch, but fell to a near-replay in his next over, two short of his second fifty of the match. In between, Shami sent back Kagiso Rabada with bounce and seam movement in the corridor, Virat Kohli taking a good, low catch at second slip.