#include <bits/stdc++.h>
using namespace std;
const int inf = 2e9 + 10;
struct pp {
  int value, id;
  bool operator<(const pp &temp) const { return value > temp.value; }
};
pp heap[110000], now;
int n, l, st, a[110000], rt[110000], now_in;
int ix, pos[110000], size, cnt_list;
long long ans, now_sum;
bool vis[110000];
void heap_down(int id) {
  int l = 2 * id + 1, r = 2 * id + 2, ii = id;
  if (l < size && heap[l] < heap[ii]) ii = l;
  if (r < size && heap[r] < heap[ii]) ii = r;
  if (ii != id) {
    swap(heap[ii], heap[id]);
    pos[heap[id].id] = id;
    pos[heap[ii].id] = ii;
    heap_down(ii);
  }
}
void heap_up(int id) {
  int ii = (id - 1) / 2;
  if (heap[id] < heap[ii]) {
    swap(heap[id], heap[ii]);
    pos[heap[id].id] = id;
    pos[heap[ii].id] = ii;
    heap_up(ii);
  }
}
void del(int id) {
  now_sum -= heap[id].value;
  pos[heap[id].id] = -1;
  if (id != size - 1) {
    heap[id] = heap[size - 1];
    pos[heap[id].id] = id;
  }
  size--;
  heap_up(id);
  heap_down(id);
}
int main() {
  int i, j, s, p, q, id;
  bool have = false;
  cnt_list = 0;
  scanf("%d%d%d", &n, &l, &st);
  st--;
  for (i = 0; i < n; i++) scanf("%d", &a[i]);
  if (l < st) {
    have = true;
    l = n - 1 - l;
    st = n - 1 - st;
    for (i = 0; i < n / 2; i++) swap(a[i], a[n - 1 - i]);
    for (i = n - 1; i >= 0; i--) a[i] = a[0] - a[i];
  }
  if ((l == 0 || l == n - 1) && st != l) {
    puts("-1");
    return 0;
  }
  ans = (a[n - 1] - a[st]) + a[n - 1] - a[0];
  ix = -1;
  size = 0;
  now_sum = 0;
  memset(pos, -1, sizeof(pos));
  now_in = inf;
  for (i = st + 1; i < n - 1; i++) {
    heap[size].id = i + 1;
    pos[i + 1] = size;
    heap[size++].value = a[i + 1] - a[i];
    now_sum += a[i + 1] - a[i];
    heap_up(size - 1);
    if (size > l - st) {
      if (now_in > heap[0].value) {
        now_in = heap[0].value;
        id = heap[0].id;
      }
      del(0);
    }
  }
  if (ans > 2 * now_sum + (a[st] - a[0]) + a[n - 1] - a[0]) {
    ans = 2 * now_sum + (a[st] - a[0]) + a[n - 1] - a[0];
    ix = n - 2;
  }
  if (pos[n - 1] >= 0) del(pos[n - 1]);
  if (size < l - st && now_in != inf) {
    now.value = a[id] - a[id - 1];
    now.id = id;
    pos[id] = size;
    now_sum += a[id] - a[id - 1];
    heap[size++] = now;
    heap_up(size - 1);
  }
  for (i = n - 2; size > 0; i--) {
    if (pos[i] >= 0) del(pos[i]);
    while (size > l - st - (n - 1 - i)) del(0);
    if (ans >=
        2 * now_sum + a[n - 1] - a[i] + (a[st] - a[0]) + a[n - 1] - a[0]) {
      ans = 2 * now_sum + a[n - 1] - a[i] + (a[st] - a[0]) + a[n - 1] - a[0];
      ix = i - 1;
    }
  }
  printf("%I64d\n", ans);
  if (ix < 0) {
    for (i = st + 1; i < n - 1 - (l - st); i++) rt[cnt_list++] = i;
    for (i = n - 1; i >= max(n - 1 - (l - st), st + 1); i--) rt[cnt_list++] = i;
    for (i = st - 1; i >= 0; i--) rt[cnt_list++] = i;
  } else {
    size = 0;
    for (i = st + 2; i <= ix; i++) {
      now.id = i;
      now.value = a[i] - a[i - 1];
      heap[size++] = now;
      heap_up(size - 1);
    }
    while (size > l - st - (n - ix - 2)) del(0);
    memset(vis, false, sizeof(vis));
    for (i = 0; i < size; i++) {
      vis[heap[i].id] = true;
    }
    cnt_list = 0;
    for (i = st - 1; i >= 0; i--) rt[cnt_list++] = i;
    for (i = st + 1; i <= ix;) {
      if (!vis[i + 1]) {
        rt[cnt_list++] = i;
        i++;
      } else {
        for (j = i + 1; j <= ix; j++) {
          if (!vis[j]) break;
        }
        for (s = j - 1; s >= i; s--) rt[cnt_list++] = s;
        i = j;
      }
    }
    for (i = n - 1; i > ix; i--) rt[cnt_list++] = i;
  }
  if (have) {
    for (i = 0; i < cnt_list; i++) rt[i] = n - 1 - rt[i];
  }
  for (i = 0; i < cnt_list; i++) printf("%d ", rt[i] + 1);
  printf("\n");
  return 0;
}
