#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, sum = 0;
  char x = getchar();
  for (; (x < '0' || x > '9'); x = getchar())
    if (x == '-') f = -1;
  for (; x >= '0' && x <= '9'; x = getchar()) sum = sum * 10 + x - '0';
  return f * sum;
}
int n, t, s;
int a[200005], biao[200005];
multiset<int> q;
vector<int> sta[2];
pair<int, int> cc[200005];
inline int calc_(int opt) {
  q.clear();
  if (t < s) {
    for (int i = 1; i <= t; ++i) sta[opt].push_back(s - i);
    if (t) {
      sta[opt].pop_back();
      sta[opt].push_back(1);
    }
    for (int i = 2; i <= s - t; ++i) sta[opt].push_back(i);
    for (int i = s + 1; i <= n; ++i) sta[opt].push_back(i);
  } else {
    for (int i = 1; i <= s - 1; ++i) sta[opt].push_back(s - i);
    int cnt = 0;
    for (int i = s + 1; i <= n - 1; ++i)
      cc[++cnt] = make_pair(a[i + 1] - a[i], i);
    sort(cc + 1, cc + cnt + 1);
    cnt = t - s + 1;
    unsigned Min = 0, tot = 0;
    for (int i = 1; i <= cnt; ++i) tot += cc[i].first, q.insert(cc[i].first);
    Min = tot * 2;
    for (int j = n - 1; j >= s + 1; --j) {
      auto it = q.lower_bound(a[j + 1] - a[j]);
      if (it == q.end()) it--;
      q.erase(it);
      tot -= *it;
      Min = min(Min, a[n] - a[j] + tot * 2);
      if (q.empty()) break;
    }
    tot = 0;
    for (int i = 1; i <= cnt; ++i) tot += cc[i].first, q.insert(cc[i].first);
    if (tot * 2 == Min) {
      for (int i = s + 1; i <= n - 1; ++i) {
        auto it = q.lower_bound(a[i + 1] - a[i]);
        if (it != q.end()) biao[i] = 1, q.erase(it);
      }
    } else {
      for (int j = n - 1; j >= s + 1; --j) {
        biao[j] = 1;
        auto it = q.lower_bound(a[j + 1] - a[j]);
        if (it == q.end()) it--;
        q.erase(it);
        tot -= *it;
        if (a[n] - a[j] + tot * 2 == Min) {
          for (int i = s + 1; i <= j; ++i) {
            it = q.lower_bound(a[i + 1] - a[i]);
            if (it != q.end()) biao[i] = 1, q.erase(it);
          }
          break;
        }
      }
    }
    for (int las = s, i = s + 1; i <= n; las = i, ++i) {
      while (biao[i]) ++i;
      sta[opt].push_back(i);
      for (int j = i - 1; j >= las + 1; --j) sta[opt].push_back(j);
    }
  }
  int x = sta[opt][0];
  unsigned ans = a[max(s, x)] - a[min(s, x)];
  for (int i = 1; i <= n - 2; ++i) {
    int x = sta[opt][i];
    int y = sta[opt][i - 1];
    ans += a[max(x, y)] - a[min(x, y)];
  }
  return ans;
}
int main() {
  n = read(), t = read(), s = read();
  for (int i = 1; i <= n; ++i) a[i] = read();
  if (s != 1 && !t) return puts("-1"), 0;
  if (s != n && !(n - t - 1)) return puts("-1"), 0;
  unsigned int ans[2] = {0};
  ans[0] = calc_(0);
  for (int i = 1; i <= n / 2; ++i) swap(a[i], a[n - i + 1]);
  memset(biao, 0, sizeof(biao));
  for (int i = 1; i <= n; ++i) a[i] = -a[i];
  t = n - 1 - t, s = n + 1 - s;
  ans[1] = calc_(1);
  printf("%d\n", min(ans[0], ans[1]));
  if (ans[0] < ans[1])
    for (int i = 0, size = sta[0].size(); i < size; ++i)
      printf("%d ", sta[0][i]);
  else
    for (int i = 0, size = sta[1].size(); i < size; ++i)
      printf("%d ", n - sta[1][i] + 1);
  puts("");
}
