#include <bits/stdc++.h>
using namespace std;
struct ww {
  int l, r, sum;
  long long an;
  vector<int> a;
  inline void clear() {
    l = r = sum = an = 0;
    a.clear();
  }
} tr[100010 * 60];
int i, j, k, n, m, t, l, s, root, _, ann;
int a[100010], b[100010], ans[100010];
long long an;
inline void update(int x) {
  int y = tr[x].l, z = tr[x].r;
  tr[x].sum = tr[y].sum + tr[z].sum;
  tr[x].an = tr[y].an + tr[z].an;
}
void inc(int &q, int x, int y, int k) {
  if (!q) q = ++t, tr[q].clear();
  if (x == y) {
    tr[q].sum++;
    tr[q].an += x;
    tr[q].a.push_back(i - 1);
    return;
  }
  int mid = (x + y) / 2;
  if (k <= mid)
    inc(tr[q].l, x, mid, k);
  else
    inc(tr[q].r, mid + 1, y, k);
  update(q);
}
long long cal(int q, int x, int y, int k) {
  if (k <= 0) return 0;
  if (x == y) return 1ll * k * x;
  int mid = (x + y) / 2, A = tr[q].l;
  if (tr[A].sum <= k)
    return tr[A].an + cal(tr[q].r, mid + 1, y, k - tr[A].sum);
  else
    return cal(tr[q].l, x, mid, k);
}
void Cal(int q, int x, int y, int k) {
  if (k <= 0 || !q) return;
  if (x == y) {
    int i;
    for (i = 0; i < k; i++) {
      int A = tr[q].a[i];
      b[A] = 1;
    }
    return;
  }
  int mid = (x + y) / 2, A = tr[q].l;
  Cal(A, x, mid, min(k, tr[A].sum));
  if (tr[A].sum <= k) Cal(tr[q].r, mid + 1, y, k - tr[A].sum);
}
inline void work(int ty) {
  t = root = 0;
  long long S = a[s] - a[1] + a[n] - a[1];
  for (i = s + 2; i <= n; i++) {
    int sum = s - 1 + n - i;
    {
      long long re = cal(root, 1, a[n], l - sum);
      long long res = re * 2 + S + a[n] - a[i];
      if (res < an) {
        an = res;
        _ = ty;
        ann = i;
      }
    }
    inc(root, 1, a[n], a[i] - a[i - 1]);
  }
}
inline void ping() {
  int t;
  ans[t = 1] = s;
  if (l < s) {
    for (j = l; j; j--) ans[++t] = j;
    for (j = l + 1; j <= n; j++)
      if (j != s) ans[++t] = j;
  } else {
    for (j = s - 1; j; j--) ans[++t] = j;
    for (i = s + 1; i < ann; i = j + 1)
      if (!b[i])
        ans[++t] = i, j = i;
      else {
        for (j = i; j < ann && b[j]; j++)
          ;
        ans[++t] = j;
        for (k = j - 1; k >= i; k--) ans[++t] = k;
      }
    ans[++t] = n;
    for (i = n - 1; i >= ann; i--) ans[++t] = i;
  }
  for (i = 2; i <= n; i++)
    if (!_)
      printf("%d ", ans[i]);
    else
      printf("%d ", n - ans[i] + 1);
  printf("\n");
}
inline void print() {
  if (!_) {
    for (i = 1; i <= n; i++) a[i] = a[n] - a[i];
    for (i = 1; i <= n / 2; i++) swap(a[i], a[n - i + 1]);
    l = n - 1 - l;
    s = n - s + 1;
  }
  t = root = 0;
  for (i = s + 2; i <= ann; i++) {
    int sum = s - 1 + n - i;
    if (i == ann) Cal(root, 1, a[n], l - sum);
    inc(root, 1, a[n], a[i] - a[i - 1]);
  }
  ping();
}
int main() {
  scanf("%d%d%d", &n, &l, &s);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  if (!l) {
    if (s == 1) {
      printf("%d\n", a[n] - a[1]);
      for (i = 2; i <= n; i++) printf("%d ", i);
      printf("\n");
    } else
      printf("-1\n");
    return 0;
  }
  if (l + 1 == n) {
    if (s == n) {
      printf("%d\n", a[n] - a[1]);
      for (i = n - 1; i; i--) printf("%d ", i);
      printf("\n");
    } else
      printf("-1\n");
    return 0;
  }
  an = (long long)1e18;
  work(0);
  for (i = 1; i <= n; i++) a[i] = a[n] - a[i];
  for (i = 1; i <= n / 2; i++) swap(a[i], a[n - i + 1]);
  l = n - 1 - l;
  s = n - s + 1;
  work(1);
  printf("%I64d\n", an);
  print();
  return 0;
}
