#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool read(T &x) {
  int c = getchar();
  int sgn = 1;
  while (~c && c<'0' | c> '9') {
    if (c == '-') sgn = -1;
    c = getchar();
  }
  for (x = 0; ~c && '0' <= c && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  x *= sgn;
  return ~c;
}
struct debugger {
  template <typename T>
  debugger &operator,(const T &v) {
    cerr << v << "    ";
    return *this;
  }
} dbg;
template <class T, class U>
inline T max(T &a, U &b) {
  return a > b ? a : b;
}
template <class T, class U>
inline T min(T &a, U &b) {
  return a < b ? a : b;
}
template <class T, class U>
inline T swap(T &a, U &b) {
  T tmp = a;
  a = b;
  b = tmp;
}
const long long INF = (1ll) << 50;
const int mx = 3e3 + 7;
const int mod = 1000000007;
const double pi = 2 * acos(0.0);
int EQ(double d) {
  if (fabs(d) < 1e-7) return 0;
  return d > 1e-7 ? 1 : -1;
}
pair<long long, long long> v[mx];
int vv[mx];
pair<long long, long long> dp[mx][mx];
int path[mx][mx];
bool vis[mx][mx];
int n, p, q;
pair<long long, long long> call(int pos, int tak1) {
  int tak2 = pos - tak1;
  if (tak1 >= p && tak2 >= q) {
    return pair<long long, long long>(0, 0);
  }
  if (pos == n) return pair<long long, long long>(-mod, -mod);
  if (vis[pos][tak1]) return dp[pos][tak1];
  vis[pos][tak1] = true;
  pair<long long, long long> ret = pair<long long, long long>(0, 0);
  if (tak1 < p) {
    path[pos][tak1] = 1;
    ret = call(pos + 1, tak1 + 1);
    ret.first += vv[v[pos].second];
  }
  pair<long long, long long> p = call(pos + 1, tak1);
  if (tak2 < q) {
    p.second += v[pos].first;
  }
  if (ret.first + ret.second < p.first + p.second) {
    path[pos][tak1] = 2;
    ret = p;
  }
  return dp[pos][tak1] = ret;
}
bool cmp(pair<long long, long long> a, pair<long long, long long> b) {
  if (a.first != b.first) return a.first > b.first;
  return a.second > b.second;
}
vector<int> P, Q;
void Path(int pos, int tak1) {
  if (P.size() == p && Q.size() == q) return;
  if (path[pos][tak1] == 1) {
    P.push_back(v[pos].second + 1);
    Path(pos + 1, tak1 + 1);
  } else {
    if (Q.size() != q) Q.push_back(v[pos].second + 1);
    Path(pos + 1, tak1);
  }
}
int main() {
  n = ({
    int a;
    read(a);
    a;
  }),
  p = ({
    int a;
    read(a);
    a;
  }),
  q = ({
    int a;
    read(a);
    a;
  });
  for (__typeof((n)-1) i = (0); i <= ((n)-1); ++i)
    vv[i] = ({
      int a;
      read(a);
      a;
    }),
    v[i].second = i;
  for (__typeof((n)-1) i = (0); i <= ((n)-1); ++i)
    v[i].first = ({
      int a;
      read(a);
      a;
    });
  sort(v, v + n, cmp);
  pair<long long, long long> z = call(0, 0);
  Path(0, 0);
  cout << z.first + z.second << endl;
  for (__typeof((p)-1) i = (0); i <= ((p)-1); ++i) {
    if (i) printf(" ");
    printf("%d", P[i]);
  }
  puts("");
  for (__typeof((q)-1) i = (0); i <= ((q)-1); ++i) {
    if (i) printf(" ");
    printf("%d", Q[i]);
  }
  puts("");
}
