Problem: An array b is called to be a subarray of a if it forms a continuous subsequence of a, that is, if it is equal to a_l, a_{l + 1}, …, a_r for some l, r.

Suppose m is some known constant. For any array, having m or more elements, let's define it's beauty as the sum of m largest elements of that array. For example: 

  * For array x = [4, 3, 1, 5, 2] and m = 3, the 3 largest elements of x are 5, 4 and 3, so the beauty of x is 5 + 4 + 3 = 12.
  * For array x = [10, 10, 10] and m = 2, the beauty of x is 10 + 10 = 20.



You are given an array a_1, a_2, …, a_n, the value of the said constant m and an integer k. Your need to split the array a into exactly k subarrays such that:

  * Each element from a belongs to exactly one subarray.
  * Each subarray has at least m elements.
  * The sum of all beauties of k subarrays is maximum possible.

Input

The first line contains three integers n, m and k (2 ≤ n ≤ 2 ⋅ 10^5, 1 ≤ m, 2 ≤ k, m ⋅ k ≤ n) — the number of elements in a, the constant m in the definition of beauty and the number of subarrays to split to.

The second line contains n integers a_1, a_2, …, a_n (-10^9 ≤ a_i ≤ 10^9).

Output

In the first line, print the maximum possible sum of the beauties of the subarrays in the optimal partition.

In the second line, print k-1 integers p_1, p_2, …, p_{k-1} (1 ≤ p_1 < p_2 < … < p_{k-1} < n) representing the partition of the array, in which:

  * All elements with indices from 1 to p_1 belong to the first subarray.
  * All elements with indices from p_1 + 1 to p_2 belong to the second subarray.
  * ….
  * All elements with indices from p_{k-1} + 1 to n belong to the last, k-th subarray.



If there are several optimal partitions, print any of them.

Examples

Input


9 2 3
5 2 5 2 4 1 1 3 2


Output


21
3 5 

Input


6 1 4
4 1 3 2 2 3


Output


12
1 3 5 

Input


2 1 2
-1000000000 1000000000


Output


0
1 

Note

In the first example, one of the optimal partitions is [5, 2, 5], [2, 4], [1, 1, 3, 2].

  * The beauty of the subarray [5, 2, 5] is 5 + 5 = 10. 
  * The beauty of the subarray [2, 4] is 2 + 4 = 6. 
  * The beauty of the subarray [1, 1, 3, 2] is 3 + 2 = 5. 



The sum of their beauties is 10 + 6 + 5 = 21.

In the second example, one optimal partition is [4], [1, 3], [2, 2], [3].

Solution (in JAVA):

Solution:

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception
    {
        Scanner in = new Scanner(System.in);
        OutputWriter out = new OutputWriter(System.out);
        int n  = in.nextInt();
        int m = in.nextInt();
        int k =in.nextInt();
        long[]a = new long[n];
        int[]index = new int[n];

        for (int i =0;i<n;i++) {
            a[i] = in.nextLong();
            index[i] = i;
        }
        long ans=0;
        MergeSort(a,index,0,n-1);
        boolean[]check = new boolean[n];
        int i1=n-1;
        int cntr=0;
        while (cntr<m*k)
        {
            ans+=(long)a[i1];
            check[index[i1]]=true;
            i1--;
            cntr++;
        }
        out.printLine(ans);
        cntr=0;
        for (int i =0;i<n;i++)
        {
            if (check[i])
            {
                cntr++;
                if (cntr%m==0&&cntr!=m*k)
                    out.print((i+1)+" ");
            }
        }
        out.flush();
    }
        static void MergeSort(long[] a, int[] b,  int p, int r)
        {
            if (p < r)
            {
                int q = (r + p) / 2;
                MergeSort(a, b,  p, q);
                MergeSort(a, b,  q + 1, r);
                Merge(a, b, p, q, r);
            }
        }
        static void Merge(long[] a, int[] b,int p, int q, int r)
        {
            int n1 = q - p + 1;
            int n2 = r - q;
            long[] R = new long[n1 + 1];
            long[] L = new long[n2 + 1];
            int[] R1 = new int[n1];
            int[] L1 = new int[n2];

            for (int i = 0; i < n1; i++)
            {
                R[i] = a[p + i];
                R1[i] = b[p + i];

            }
            R[n1] = Long.MAX_VALUE;
            for (int i = 0; i < n2; i++)
            {
                L[i] = a[q + i + 1];
                L1[i] = b[q + i + 1];

            }
            L[n2] =Long.MAX_VALUE;
            int n = a.length;
            int j = 0;
            int k = 0;
            for (int i = p; i <= r; i++)
            {
                if (L[j] < R[k])
                {
                    a[i] = L[j];
                    b[i] = L1[j];

                    j++;
                }
                else if (L[j]>R[k])
                {
                    a[i] = R[k];
                    b[i] = R1[k];

                    k++;
                }
                else
                {
                    if (L1[j] < R1[k])
                    {
                        a[i] = L[j];
                        b[i] = L1[j];

                        j++;
                    }
                    else
                    {
                        a[i] = R[k];
                        b[i] = R1[k];

                        k++;
                    }
                }

            }
        }
}
class Graph {


    int n;
    ArrayList<Integer>[] adjList;

    public Graph(int n) {
        this.n = n;
        adjList = new ArrayList[n];
        for (int i = 0; i < n; i++)
            adjList[i] = new ArrayList<>();
    }

}
class pair  implements Comparable
{

    int key;
    int value;
    int id;
    public pair(Object key, Object value,Object id) {

        this.key = (int)key;
        this.value=(int)value;
        this.id=(int)id;
    }

    @Override
    public int compareTo(Object o) {
        pair temp =(pair)o;
        if (key!=temp.key)
            return  key-temp.key;
        else return id-temp.id;
    }
}
class Scanner {

    StringTokenizer st;
    BufferedReader br;

    public Scanner(InputStream s) {
        br = new BufferedReader(new InputStreamReader(s));
    }

    public Scanner (FileReader f) {
        br = new BufferedReader(f);
    }

    public String next() throws IOException {
        while (st == null || !st.hasMoreTokens())
            st = new StringTokenizer(br.readLine());
        return st.nextToken();
    }

    public int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    public String nextLine() throws IOException {
        return br.readLine();
    }

    public double nextDouble() throws IOException {
        String x = next();
        StringBuilder sb = new StringBuilder("0");
        double res = 0, f = 1;
        boolean dec = false, neg = false;
        int start = 0;
        if (x.charAt(0) == '-') {
            neg = true;
            start++;
        }
        for (int i = start; i < x.length(); i++)
            if (x.charAt(i) == '.') {
                res = Long.parseLong(sb.toString());
                sb = new StringBuilder("0");
                dec = true;
            } else {
                sb.append(x.charAt(i));
                if (dec)
                    f *= 10;
            }
        res += Long.parseLong(sb.toString()) / f;
        return res * (neg ? -1 : 1);
    }

    public boolean ready() throws IOException {
        return br.ready();
    }

    public boolean nextEmpty() throws IOException {
        String s = nextLine();
        st = new StringTokenizer(s);
        return s.isEmpty();
    }
}
class OutputWriter {
    private final PrintWriter writer;

    public OutputWriter(OutputStream outputStream) {
        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
    }

    public OutputWriter(Writer writer) {
        this.writer = new PrintWriter(writer);
    }

    public void print(Object... objects) {
        for (int i = 0; i < objects.length; i++) {
            if (i != 0)
                writer.print(' ');
            writer.print(objects[i]);
        }
    }


    public void printLine(Object... objects) {
        print(objects);
        writer.println();
    }

    public void close() {
        writer.close();
    }

    public void flush() {
        writer.flush();
    }

}