Advanced Post Display/Pagination/Ordering

Some thoughts on how I would approach this. I can update later with some code if necessary when I have the time.

I would handle the first page with two additional queries, so three loops on page one. Hook pre_get_posts and do two meta queries for the three posts that will appear in the first two loops. Those will be cached for later when you display them on your page. What you want now though is the post IDs. Use those to set post__not_in on your main query. Maybe put those IDs in a transient for subsequent pages? You’ll have to exclude those 3 IDs from all pages for the pagination to be correct. Not sure on that one.

Page two and onward have the three top IDs excluded via the same post__not_in like you set on the first page.

To get 17 posts on page one and 20 posts on subsequent pages in the main query, you’ll have to set offset manually, and correct found_posts via a filter. I just answered another question with some code that may be helpful here: Trying to exclude first 5 posts from the first page on the homepage.