After unbeaten knocks from Amla (311) and Kallis (182), South Africa reduced England to 102 for 4 at stumps on day four.
London: Hashim Amla's epic triple century that took more than 13 hours has South Africa poised to win the first Test against England, with the hosts trailing by 150 runs on Sunday with six second-innings wickets in hand.
Amla's 311 not out from 529 balls lasted 790 minutes, contained 35 boundaries and broke AB de Villiers' 278 not out as the highest Test score by a South African batsman. It also has South Africa on the verge of leading 1-0 in the three-Test series with one day's play left at The Oval.
England had slumped to 102 for 4 by stumps with Ravi Bopara 15 not out and Ian Bell unbeaten on 14. Vernon Philander had the best figures of 1 for 13.
"I'm happy and surprised," Amla said. "Obviously I'm really excited to do something that's never been done before by a South African, but the big pleasure is to be in a really dominant position to win this Test match."
Amla and Jacques Kallis (182 not out) put on a stand of 377 after captain Graeme Smith was dismissed for 131. Kallis hit a six and 23 fours in 326 balls on a torturous and wicket-less day for England's bowlers.
"Obviously we're not winning the Test match," England batting coach Graham Gooch said. "But it's not over yet and we've got to believe we can get out of this game with a draw. If England can do that it'll be a great achievement. If we can have a good partnership first thing in the morning and get through to lunch there's a chance."
Amla's innings was remarkable for its style and quality. The South African played few false shots against an England attack whose discipline never wavered — even after 13 hours in the field the run rate was only 3.37.
The lone real chance Amla offered was on Friday evening, slashing at a delivery from Ravi Bopara only for England captain Andrew Strauss to miss a difficult catching opportunity at first slip when on 40.
"There were a lot more mistakes than that, but none that were exposed," Amla said. "In every innings there are times when fortune favors you. That's just part of the game. On another day you nick and get caught."
Having already toiled for a day and a half, the torment continued for England's bowlers throughout Sunday. The morning session amounted to little more than South Africa ticking off a succession of landmarks.
The 150 partnership came off 309 balls and Amla reached his 200 off 392 deliveries when he pushed a delivery from Stuart Broad for three through cover.
Kallis then steered Bresnan to third man to reach his century — his 43rd in Tests — from 227 balls. Amla beat his previous best Test score of 253 not out against India in Nagpur in 2010 when he drove Anderson for four early in the afternoon session. And he broke de Villiers' record with a four off Tim Bresnan before Kallis strolled to 150 with a single from Graeme Swann.
Chances only came after South Africa started to accelerate toward a declaration.
Amla reached his triple century, off 515 balls, with a four off Bopara that just eluded the fielder at cover. Bopara then got a hand to a drive from Amla but couldn't hold the catch.
"With my scoring rate, 300 looked a very long way away," Amla said. "It didn't really cross my mind until I got to 250 and we started scoring freely. We had a target for the score we wanted at tea and we were fortunate that we could play the situation."
South Africa declared during the tea interval — a move that surprised some.
"I think we kind of saw that it was a good wicket to bat on," Amla said. "You'd rather have a bit of time out there to bowl and chase whatever you have to, then have 10 to 15 overs that you might need later on."
The decision was vindicated when the tourists claimed a wicket in the second over of the evening session, when Alastair Cook was caught behind for 0 off Philander.
The Oval crowd broke into a spontaneous ovation when news broke that cyclist Bradley Wiggins had become the first British winner of the Tour de France, but otherwise they had nothing to cheer about.
Jonathan Trott fell in the 11th over, caught behind off Dale Steyn, but England was handed a lifeline when Kevin Pietersen wafted a ball from Morne Morkel and was dropped by Kallis at second slip.
It was a short-lived reprieve for Pietersen, who batted like a man playing a one-day innings. After 17 balls, Morkel bowled him middle stump and he was out for 16.
Strauss played an equally senseless shot when he tried to sweep Imran Tahir and was caught off a top edge by Philander at square leg for 27. But Bopara and Bell survived to take the game into a fifth day.