1/3 of posts different class

The explanation is in the comments:

<?php

...

if ( $query->have_posts() ) :
    //number of small ones needed = a third of total number of posts
    $numsmallneeded = round($query->post_count / 3);

    ...

    while ( $query->have_posts() ) : $query->the_post();

        //if no more small sizes are needed, use big
        if ( !$numsmallneeded ) $size = 1;
        //if number of small sizes needed = number of remaining posts, use small
        else if ( $numsmallneeded == $query->post_count - $query->current_post) $size = 0;
        //else pick at random
        else $size = rand(0, 1);

        //if small was picked, reduce number of small ones needed by 1
        if ( !$size ) $numsmallneeded--;

    ?>              

        <li class="grid-item size-<?php echo ++$size; /*add 1 before printing*/ ?>">

        ...

    <?php endwhile; wp_reset_postdata(); ?><!-- reset loop -->

                </ul>
<?php endif;?>