#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
vector<int> teve;
vector<vector<int>> graf;
vector<bool> jelolt;
vector<int> kivalasztott;
ll vizsgal(int helyzet){
ll osszeg = 0;
for(int kov : graf[helyzet]){
osszeg += vizsgal(kov);
}
if(osszeg < teve[helyzet]){
jelolt[helyzet] = true;
osszeg = teve[helyzet];
}
return osszeg;
}
void dfs(int akt){
if(jelolt[akt]){
kivalasztott.push_back(akt);
return;
}
for(int kov : graf[akt]){
dfs(kov);
}
}
int main()
{
cin >> n;
teve.assign(n, 0);
graf.assign(n, vector<int>(0, 0));
jelolt.assign(n, false);
for(int i = 0; i < n; i++){
cin >> teve[i];
}
for(int i = 0; i < n - 1; i++){
int a;
cin >> a;
graf[a - 1].push_back(i + 1);
}
/*
for(int i = 0; i < n; i++){
cout << i << ": ";
for(int x : graf[i]){
cout << x << " ";
}
cout << "\n";
}
*/
ll valasz = vizsgal(0);
cout << valasz << "\n";
dfs(0);
cout << kivalasztott.size() << "\n";
sort(kivalasztott.begin(), kivalasztott.end());
for(int x : kivalasztott){
cout << x+1 << " ";
}
cout << "\n";
}