#include <bits/stdc++.h>
using namespace std;
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
const int N = 3005;
pair<pair<int, int>, int> ara[N];
int n, p, s;
int dp[N][N];
vector<int> P, S;
int call(int pos, int sport, int prog) {
  if (sport == 0 and prog == 0) return 0;
  if (pos == n + 1) return -1e9;
  if (dp[pos][sport] != -1) return dp[pos][sport];
  int ret = 0;
  if (sport > 0)
    ret = max(ret, ara[pos].first.second + call(pos + 1, sport - 1, prog));
  if (prog > 0)
    ret = max(ret, ara[pos].first.first + call(pos + 1, sport, prog - 1));
  else
    ret = max(ret, call(pos + 1, sport, prog));
  return dp[pos][sport] = ret;
}
void rec(int pos, int sport, int prog) {
  if (sport == 0 and prog == 0) {
    return;
  }
  if (pos == n + 1) return;
  if (sport > 0 and
      call(pos, sport, prog) ==
          ara[pos].first.second + call(pos + 1, sport - 1, prog)) {
    S.push_back(ara[pos].second);
    rec(pos + 1, sport - 1, prog);
    return;
  }
  if (prog > 0 and call(pos, sport, prog) ==
                       ara[pos].first.first + call(pos + 1, sport, prog - 1)) {
    P.push_back(ara[pos].second);
    rec(pos + 1, sport, prog - 1);
    return;
  } else {
    if (call(pos, sport, prog) == call(pos + 1, sport, prog)) {
      rec(pos + 1, sport, prog);
      return;
    }
  }
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> n >> p >> s;
  for (int i = 1; i <= n; i++) cin >> ara[i].first.first;
  for (int i = 1; i <= n; i++) cin >> ara[i].first.second;
  for (int i = 1; i <= n; i++) ara[i].second = i;
  sort(ara + 1, ara + n + 1);
  reverse(ara + 1, ara + n + 1);
  cout << call(1, s, p) << "\n";
  rec(1, s, p);
  for (int i : P) cout << i << " ";
  cout << endl;
  for (int i : S) cout << i << " ";
  cout << endl;
}
