#include <bits/stdc++.h>
using namespace std;
multiset<long long> secik;
multiset<long long>::iterator it;
int n, l, p, s, koniec_akt;
int wyn[100007];
long long t[100007];
pair<long long, int> kraw[100007];
bool czy_skok[100007];
void siekaj_rozwa(int start, int koniec) {
  int ile = 0, ile_kraw = 0;
  int ile_kon = n - 2;
  for (int i = 0; i <= (n); i++) czy_skok[i] = false;
  int ile_l = l;
  int ile_na_prawo = koniec == n - 1 ? 0 : 1;
  if (ile_l > start) {
    ile_l -= start;
    for (int i = start - 1; i >= (0); i--) wyn[ile++] = i;
  } else {
    for (int i = ile_l - ile_na_prawo - 1; i >= (0); i--) wyn[ile++] = i;
    for (int i = ile_l - ile_na_prawo; i <= (s - 1); i++) wyn[ile++] = i;
    ile_l = ile_na_prawo;
  }
  if (ile_l > n - 1 - koniec) {
    ile_l -= (n - 1 - koniec);
    for (int i = koniec; i <= (n - 1); i++) wyn[ile_kon--] = i;
  } else {
    for (int i = 0; i < (ile_l); i++) wyn[ile_kon--] = koniec + i;
    for (int i = n - 1; i >= (koniec + ile_l); i--) wyn[ile_kon--] = i;
    ile_l = 0;
  }
  for (int i = s + 1; i <= (koniec - 2); i++)
    kraw[ile_kraw++] = make_pair(t[i + 1] - t[i], i);
  sort(kraw, kraw + ile_kraw);
  for (int i = 0; i < (ile_l); i++) czy_skok[kraw[i].second] = true;
  int wsk = start + 1;
  while (wsk < koniec) {
    if (czy_skok[wsk]) {
      int pom = wsk;
      while (czy_skok[pom]) ++pom;
      for (int i = pom; i >= (wsk); i--) wyn[ile++] = i;
      wsk = pom + 1;
    } else
      wyn[ile++] = wsk++;
  }
}
long long siekaj_na_prawo() {
  secik.clear();
  if (s == n - 1 || p == 0) return 1000000000000000000LL;
  if (l == 0) {
    if (s == 0) {
      koniec_akt = n - 1;
      return t[n - 1] - t[0];
    }
    return 1000000000000000000LL;
  }
  long long res = 1000000000000000000LL;
  long long sum = t[n - 1] - t[0] + t[s] - t[0];
  if (l == 1) {
    koniec_akt = n - 1;
    if (s == 0) {
      long long najm_kr = 1000000000000000000LL;
      for (int i = 1; i <= (n - 3); i++)
        najm_kr = min(najm_kr, t[i + 1] - t[i]);
      if (t[n - 1] - t[n - 2] < 2 * najm_kr) koniec_akt = n - 2;
      res = sum + min(t[n - 1] - t[n - 2], 2 * najm_kr);
    } else
      res = sum;
    return res;
  }
  if (p == 1) {
    res = min(res, sum + t[n - 1] - t[s + 1]);
    koniec_akt = s + 1;
    return res;
  }
  long long sum_secik = 0;
  int ile_l = max(0, l - s);
  int kon = n - 1;
  for (int i = s + 1; i <= (kon - 2); i++) {
    if (i - s <= ile_l) {
      secik.insert(t[i + 1] - t[i]);
      sum_secik += t[i + 1] - t[i];
    } else if (!secik.empty()) {
      it = secik.end();
      --it;
      if (*it > t[i + 1] - t[i]) {
        sum_secik -= *it - t[i + 1] + t[i];
        secik.erase(it);
        secik.insert(t[i + 1] - t[i]);
      }
    }
  }
  while (ile_l) {
    if (res > sum + 2 * sum_secik) {
      res = sum + 2 * sum_secik;
      koniec_akt = kon;
    }
    sum += t[kon] - t[kon - 1];
    --kon;
    --ile_l;
    it = secik.find(t[kon] - t[kon - 1]);
    if (it != secik.end()) {
      secik.erase(it);
      sum_secik -= t[kon] - t[kon - 1];
    } else {
      it = secik.end();
      --it;
      sum_secik -= *it;
      secik.erase(it);
    }
  }
  if (res > sum + 2 * sum_secik) {
    res = sum + 2 * sum_secik;
    koniec_akt = kon;
  }
  return res;
}
int main() {
  long long res = 1000000000000000000LL;
  scanf("%d%d%d", &n, &l, &s);
  --s;
  p = n - 1 - l;
  for (int i = 0; i < (n); i++) scanf("%lld", &t[i]);
  res = siekaj_na_prawo();
  siekaj_rozwa(s, koniec_akt);
  swap(l, p);
  s = n - 1 - s;
  for (int i = 0; i < (n); i++) t[i] = t[n - 1] - t[i];
  for (int i = 0; i < (n / 2); i++) swap(t[i], t[n - 1 - i]);
  long long pom = siekaj_na_prawo();
  if (res > pom) {
    siekaj_rozwa(s, koniec_akt);
    for (int i = 0; i < (n - 1); i++) wyn[i] = n - 1 - wyn[i];
    res = pom;
  }
  if (res == 1000000000000000000LL)
    puts("-1");
  else {
    printf("%lld\n", res);
    for (int i = 0; i < (n - 1); i++) printf("%d ", wyn[i] + 1);
    puts("");
  }
  return 0;
}
