import java.io.PrintStream;
import java.util.Arrays;
import java.util.Scanner;

/**
 * Solution to Platform Placing
 * 
 * @author vanb
 */
public class platform_vanb
{
    /** Input. */
    private static Scanner sc;
    
    /** Output. */
    private static PrintStream ps;
    
    /**
     * Do it!
     */
    private void doit()
    {
        int n = sc.nextInt();
        int s = sc.nextInt();
        int k = sc.nextInt();
        
        int f[] = new int[n];
        for( int i=0; i<n; i++ ) f[i] = sc.nextInt()*2;
        Arrays.sort( f );
        
        int total = 0;
        int sofar = -k*4;
        boolean ok = true;
        for( int i=0; i<n; i++ )
        {
            int forward = i<n-1 ? f[i+1] - s - f[i] : k;
            int back = f[i] - sofar;
            int best = Math.min( k, Math.min( forward, back ) );
            
            if( best<s ) ok = false;
            else
            {
                total += best;
                sofar = f[i] + best;
            }
        }
        ps.println( ok ? total : -1 );        
    }
        
    /**
     * Main.
     * 
     * @param args unused
     * @throws Exception
     */
    public static void main( String[] args ) throws Exception
    {
        sc = new Scanner( System.in );
        ps = System.out;
        
        new platform_vanb().doit();
    }

}
