Stop duplicate posts

You can use WP_Query to create your custom loop, and then use the offset parameter to skip the posts in the previous loop. You are going to run 3 loops from one query, so all you need to do to rerun the query is to use rewind_posts() after each loop to reset the loop

Here is an example code which you can modify to suite your exact needs. This is just a very basic loop

<?php
$args = array( 'posts_per_page' => 4);
$my_query= new WP_Query( $args ); ?>
<ul>
    <?php
    while ($my_query->have_posts()) : $my_query->the_post();
        ?>
        <li><?php the_title(); ?></li>
        <?php
    endwhile; 
    ?>
</ul>
<?php

$my_query->rewind_posts();

?> 
<ul>
    <?php
    $my_query->query('posts_per_page=4&offset=4');
    while ($my_query->have_posts()) : $my_query->the_post();
        ?>
        <li><?php the_title(); ?></li>
        <?php
    endwhile;
    ?>
</ul>
<?php

$my_query->rewind_posts();

?> 
<ul>
    <?php
    $my_query->query('posts_per_page=4&offset=8');
    while ($my_query->have_posts()) : $my_query->the_post();
        ?>
        <li><?php the_title(); ?></li>
        <?php
    endwhile;
    ?>
</ul>
<?php
wp_reset_postdata();
?>