This is the third in an eight-part series reviewing the 2016 Vikings and looking ahead by position. Previously: OL / RB, TE

The Vikings got a lot from two smaller contracts and not enough from their top picks at wide receiver in 2016. Adam Thielen's emergence paired with Stefon Diggs, a fifth-round pick two years ago, gives Sam Bradford a potent duo moving forward. Diggs and Thielen, whose combined salary cap hits were under $1.2 million last season (14 percent of cap used at WR), produced 71 percent of yardage at their position.

This offseason they'll likely lock up Thielen, a restricted free agent, which means the Vikings have right of refusal and can match any offer made by another team or possibly gain a draft pick for losing him. Others, like soon-to-be free agent Cordarrelle Patterson, Charles Johnson and Jarius Wright, could land elsewhere.

Receivers

Under contract in 2017: Stefon Diggs, Jarius Wright, Laquon Treadwell, Isaac Fruechte

Pending free agents: Adam Thielen*, Cordarrelle Patterson, Charles Johnson

– *restricted free agent

Grades are based on a 1-5 scale, with '5′ marking an excellent season, '4′ for above-average, '3′ for average, '2′ for below-average and '1′ for failure to perform. Players who did not accrue a season (weren't on the active roster for at least six weeks) or played in three games or fewer are not graded. Based on game and practice observations, weekly film reviews and interviews. Dropsare provided by Pro Football Focus analyst Trevor Lynch.

Adam Thielen (3.5): Led receivers with 786 snaps [74.7%] in a breakout season. Fell just 33 yards short of becoming the franchise's first 1,000-yard receiver in seven years. Led the Vikings with 967 receiving yards on a $600,000 contract. Added five touchdowns. Showed excellent hands and routes just three years removed from going undrafted out of Minnesota State-Mankato. One of the league's most effective downfield targets, despite being in a limited offense. Led the team with 16 plays of 20-plus yards. Nearly set the Vikings' single-game receiving record with 202 yards on 12 grabs in Green Bay. Continued to contribute on special teams, stepping in as a punt returner for Marcus Sherels. Had a critical fumble on a return that led to a Cowboys touchdown in the Dec. 1 loss. Dropped three passes. Flagged once. A restricted free agent.

Stefon Diggs (3.5): In his second NFL season, Diggs moved around the formation and started lining up in the slot more. He gained mismatches that helped him pick up 285 receiving yards in his first two games — from Shaun Hill and Sam Bradford. Continued to grow as the group's most promising talent. Led the Vikings in receptions (84) and receiving yards per game (69.5) despite missing three games to injuries, which led to a vow to be more available next season. Played 693 snaps [65.9%]. Produced 903 receiving yards and three touchdowns on a $581,928 salary cap hit. Named NFC Offensive Player of the Week after his 182-yard outing vs. the Packers. Set an NFL record with consecutive 13-catch games, doing so in losses to the Lions and Redskins. Did not fumble. Accrued $18,230 between two fines, both against Green Bay, including one for tossing the ball into the stands at Lambeau and another for unsportsmanlike conduct. Dropped four passes. Flagged three times.

Cordarrelle Patterson (2.5): The former first-round pick regained a role in the offense and caught a career-best 52 passes on 531 snaps [50.5%]. Added to his special teams duties as a gunner and said he made the first tackle of his football-playing career on Panthers returner Ted Ginn in Week 3. Still most of Patterson's value came as the league's best kick returner, where he averaged 31.7 yards, scored a touchdown and was named first-team All Pro for the second time. Didn't dodge as many defenders on offense, where his use still came on underneath routes by averaging just 8.7 yards per catch. Had just four receptions of 20-plus yards, tying running back Matt Asiata. Dropped one pass. Fumbled twice, losing neither. Flagged three times, including the illegal formation followed up by Bradford's game-losing interception in Detroit. Pending free agent.

Jarius Wright (2.5): Relegated to a backup role as the team's highest-paid receiver ($2.56 million cap hit) with Diggs moving into the slot and Thielen taking up an outside spot. Played 119 snaps [11.3%], most coming in two games without Diggs. Against Houston and Chicago, Wright caught nine of his 11 receptions on the season. Still showed value as an underneath threat, but was not used in an offense that needed more from its outside targets. Dropped one pass. After Wright had been the Vikings' primary slot receiver for three seasons, he could be on the move this offseason. Under contract for a $2.5 million base salary in 2017, none guaranteed.

Charles Johnson (2.0): Played 405 snaps [38.5%], opening as the starting split end before Patterson gained more of a role by Week 4. Caught one pass on six targets from Shaun Hill in the season opener and was not targeted that much again all season. Finished with 20 catches for 232 yards. Struggled to connect with either Hill or Sam Bradford, producing the lowest catch rate [54.1%] among players with at least 10 targets. Had his best game with two sideline grabs for 70 yards against the Giants. Dropped one pass. Flagged once. A pending free agent.

Laquon Treadwell (1.5): Drafted 23rd overall and played the fewest possible offensive snaps [80, 7.6%] of a first-round wide receiver since A.J. Jenkins was made the 30th-overall pick in 2012. A disappointing rookie season started with Treadwell not willing to say he was fully healthy in camp. His feet bothered and set him back early in the season, according to head coach Mike Zimmer. However, Treadwell was not on the injury report as a healthy scratch in two of the first three weeks. Appeared in nine games, making one start on Thanksgiving in Detroit, where he was targeted once on a bobbled pass turned interception, negated by defensive pass interference. Caught one pass for 15 yards on three targets all season. Added one tackle on 47 special teams snaps.

Isaac Fruechte (N/A): Released in final roster cuts after camp and signed with the Lions practice squad. The former Gopher rejoined the Vikings practice squad a few weeks later. Promoted to the active roster for the season finale.