"Hitting is contagious, and I got it going," Cain said. "Great team effort today."
The Royals had to work hard for it, tying the game twice before finally taking a late lead, but were able to pull within 3 1/2 games of second-place Cleveland in the American League Central with back-to-back wins coming in a 15-hour span on Thursday.
"We told ourselves before that if we are going to make a run at this, these are big games that we can make up ground, when you're facing a team that's in front of you in the division, and we didn't want to lose this opportunity or let games slip away," Hosmer said.
Indians right-hander Ubaldo Jimenez opened his outing with five scoreless innings, allowing just two hits, as his team built a 5-0 lead. But the sixth inning was a different story.
Jimenez walked the first two batters and Mike Moustakas reached on a Jimenez error. Cain then sent a 3-2 pitch sailing over the center-field wall for his first career grand slam.
"Jiminez was right on top of his game for the first five innings," Royals manager Ned Yost said. "We couldn't get anything going off of him and then in the sixth inning we just started chipping away until Lorenzo Cain's big blow."
Kottaras followed with a home run of his own to right field to tie the score at 5-5. Kottaras hadn't appeared in a game since June 23 against the White Sox, when he was also part of a back-to-back home run rally.
"I wasn't trying to do that," Kottaras said. "I just wanted to hit the ball hard somewhere. Had a good at-bat and it ended up going out. It felt great."
With the Royals trailing 7-5 in the seventh, Hosmer joined the festivities when he homered to tie the score again. It was his eighth home run since June 13.
One inning later, Perez delivered the game-winning blow.
"Quite frankly, he was a little upset with me this morning when he wasn't playing," Yost said. "I told him, 'Be ready, because you can have an impact on this game,' and from the sixth inning on he was in the cage swinging and getting himself ready for that opportunity, and he took advantage of it."
Yost said the early 5-0 deficit would have seemed insurmountable just a few weeks ago, but now the Royals have won four of their last six games, scoring nine, nine, six and 10 runs in their victories.
"We feel like we are over the hump offensively," Yost said. "Any time you can score 10 runs on six hits, you're slugging. We had big home runs by Lorenzo Cain, Hosmer, and Kottaras to tie it there in the five-run sixth inning. Our guys are starting to feel real good about themselves, and even though we were down 5-0, we still felt like we were in that game and it turned out to be true."
According to Stats, Inc., it was just the 17th time since 1921 a team scored 10 or more runs on six hits.
"It seems like we're all coming together at the same time right now," Kottaras said. "Everyone is having great at-bats, we're making the other team work and we're never giving up."
The offense offered some relief for Royals starter James Shields, who struggled through a 34-pitch first inning. He was sent home early on Wednesday night during the 2 1/2-hour rain delay, but his extra rest didn't seem to help much as he gave up four singles and a walk in the top of the first. One run scored on Michael Brantley's one-out RBI single.
The second inning wasn't much better, as Shields gave up a leadoff double to Mike Aviles and a two-run homer to Drew Stubbs that went flying over the left-field wall.
"In the beginning of the game I was just missing my fastball," Shields said. "I kind of settled in, but it was about 80 pitches later. I've got to do a better job early in the game of getting ahead of batters."
Shields held the Indians scoreless for three more innings before Stubbs knocked in two more runs for a season-high four RBIs with one out in the top of the sixth. With runners on the first and second, Shields turned it over to right-hander J.C. Gutierrez, who ended the inning in five pitches.
"He got his pitch count up," Yost said. "He gave up two in the sixth inning, and up to that point we were still right there, [down] 3-0. Knowing what the offense can do, you still feel like you're still in the game, so you give him the opportunity to try to get us through the sixth and he just couldn't do it today."
Shields lasted 5 1/3 innings -- his second shortest start of the season -- allowing five runs on nine hits and two walks, striking out three.
Luke Hochevar was awarded the win for his scoreless eighth inning, while Greg Holland got his 19th save of the season for his efforts in the ninth.