#include <iostream>
#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
const int N = 1e5 + 5 ;
int a[N] , s[N] , n , k ;
namespace sub1
{
int a_new[N] ;
void solve()
{
while(k -- )
{
for(int i = 1 ; i <= n ; i ++)
{
a_new[s[i]] += a[i] ;
}
for(int i = 1 ; i <= n ; i ++ )
{
a[i] += a_new[i] - a[i] ;
a_new[i] = 0 ;
}
}
int maxi = 0 ;
for(int i = 1 ; i<= n ; i ++)
{
maxi = max(maxi , a[i]) ;
}
cout<<maxi<<endl ;
for(int i = 1 ; i <= n ; i ++)
{
if(a[i] == maxi) cout<<i<<" " ;
}
}
}
namespace sub2
{
int tin[N] , low[N] , t = 0 , cnt = 0 , group[N] , pos[N] ;
stack<int> st ;
vector<int> g[N] ;
vector<int> luu[N] ;
bool out_stack[N] ;
void dfs(int u)
{
t ++ ;
tin[u] = low[u] = t ;
st.push(u) ;
for(int v : g[u])
{
if(out_stack[v] == false)
{
if(low[v] != 0)
{
low[u] = min(low[u] , tin[v]) ;
}
else
{
dfs(v) ;
low[u] = min(low[u] , low[v]) ;
}
}
}
if(low[u] == tin[u])
{
int v ;
cnt ++ ;
do
{
v = st.top() ;
st.pop();
out_stack[v] = true ;
luu[cnt].push_back(v) ;
group[v] = cnt ;
// cout<<v<<" " ;
}while(u != v);
// cout<<endl ;
}
}
int a_new[N] ;
void solve()
{
for(int i = 1 ; i <= n ; i ++ )
{
g[i].push_back(s[i]) ;
}
for(int i = 1 ; i <= n ; i ++ )
{
if(tin[i] == 0) dfs(i) ;
}
for(int i = 1 ; i <= cnt ; i ++)
{
reverse(luu[i].begin() , luu[i].end()) ;
for(int j = 0 ; j <= luu[i].size() - 1 ; j ++ )
{
pos[luu[i][j]] = j ;
}
}
for(int i = 1 ; i <= n ; i ++ )
{
int next = luu[group[i]][(pos[i] + k) % luu[group[i]].size()] ;
a_new[next] += a[i] ;
}
for(int i = 1 ; i <= n ; i ++ )
{
a[i] += a_new[i] - a[i] ;
}
int maxi = 0 ;
for(int i = 1 ; i <= n ; i ++ )
{
maxi = max(maxi , a[i]) ;
}
cout<<maxi<<endl;
for(int i = 1 ; i <= n ; i ++ )
{
if(a[i] == maxi)
{
cout<<i<<" ";
}
}
}
}
int main()
{
ios::sync_with_stdio(0) ;
cin.tie(0) ; cout.tie(0) ;
cin>>n>>k;
for(int i = 1 ; i <= n ; i ++ )
{
cin>>a[i] ;
}
for(int i = 1 ; i <= n ; i ++ )
{
cin>>s[i] ;
}
if(n <=1000 && k <= 1000) return sub1::solve() , 0 ;
return sub2::solve() , 0 ;
return 0;
}