#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5005;
vector<int> g[maxn], ed[maxn];
int n, k, dp[maxn][maxn], num[maxn], low[maxn], sccid[maxn], scc, par[maxn], sz[maxn], v[maxn], indegree[maxn], sccv[maxn], tplt, t;
vector<int> id;
stack<int> st;
bool vis[maxn];
struct node{
int id, sz, v;
};
vector<node> a;
void dfs(int u, int p)
{
vis[u] = 1;
low[u] = num[u] = ++t;
st.push(u);
for(int v : g[u])
{
if(v == p) continue;
if(num[v]) low[u] = min(low[u], num[v]);
else
{
dfs(v, u);
low[u] = min(low[u], low[v]);
}
}
if(low[u] == num[u])
{
scc++;
while(st.top() != u)
{
int v = st.top();
st.pop();
sccid[v] = scc;
}
int v = st.top();
st.pop();
sccid[v] = scc;
}
}
void dfs2(int u)
{
for(int v : ed[u])
{
dfs2(v);
sccv[u] += sccv[v];
sz[u] += sz[v];
}
a.push_back({tplt, sz[u], sccv[u]});
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
if(fopen("actnet.inp", "r"))
{
freopen("actnet.inp", "r", stdin);
freopen("actnet.out", "w", stdout);
}
cin >> n >> k;
for(int i = 1; i <= n; i++)
{
cin >> par[i];
if(par[i] != i)
{
g[i].push_back(par[i]);
g[par[i]].push_back(i);
}
}
for(int i = 1; i <= n; i++) cin >> v[i];
for(int i = 1; i <= n; i++) if(!vis[i]) dfs(i, i);
// cout << sccid[5] << ' ' << sccid[6] << '\n';
for(int i = 1; i <= n; i++)
{
// if(par[i] == i) indegree[sccid[i]]++;
if(sccid[par[i]] != sccid[i])
{
ed[sccid[i]].push_back(sccid[par[i]]);
// ed[sccid[par[i]]].push_back(sccid[i]);
indegree[sccid[par[i]]]++;
}
sccv[sccid[i]] += v[i];
sz[sccid[i]]++;
}
// cout << indegree[3] << '\n';
for(int i = 1; i <= scc; i++)
{
if(indegree[i] == 0)
{
tplt++;
dfs2(i);
}
}
int last = 0, ans = 0;
dp[1][a[0].sz] = a[0].v;
for(int i = 2; i <= a.size(); i++)
{
for(int j = 0; j <= k; j++)
{
dp[i][j] = dp[i - 1][j];
}
if(a[i - 1].id != a[i - 2].id) last = i - 1;
for(int j = 0; j <= k; j++)
{
if(j + a[i - 1].sz <= k) dp[i][j + a[i - 1].sz] = max(dp[i][j + a[i - 1].sz], dp[last][j] + a[i - 1].v);
ans = max(ans, dp[i][j]);
}
}
// for(node x : a) cout << x.id << ' ' << x.sz << ' ' << x.v << '\n';
cout << ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwpjb25zdCBpbnQgbWF4biA9IDUwMDU7CnZlY3RvcjxpbnQ+IGdbbWF4bl0sIGVkW21heG5dOwppbnQgbiwgaywgZHBbbWF4bl1bbWF4bl0sIG51bVttYXhuXSwgbG93W21heG5dLCBzY2NpZFttYXhuXSwgc2NjLCBwYXJbbWF4bl0sIHN6W21heG5dLCB2W21heG5dLCBpbmRlZ3JlZVttYXhuXSwgc2NjdlttYXhuXSwgdHBsdCwgdDsKdmVjdG9yPGludD4gaWQ7CnN0YWNrPGludD4gc3Q7CmJvb2wgdmlzW21heG5dOwpzdHJ1Y3Qgbm9kZXsKCWludCBpZCwgc3osIHY7Cn07CnZlY3Rvcjxub2RlPiBhOwp2b2lkIGRmcyhpbnQgdSwgaW50IHApCnsKCXZpc1t1XSA9IDE7Cglsb3dbdV0gPSBudW1bdV0gPSArK3Q7CglzdC5wdXNoKHUpOwoJZm9yKGludCB2IDogZ1t1XSkKCXsKCQlpZih2ID09IHApIGNvbnRpbnVlOwoJCWlmKG51bVt2XSkgbG93W3VdID0gbWluKGxvd1t1XSwgbnVtW3ZdKTsKCQllbHNlCgkJewoJCQlkZnModiwgdSk7CgkJCWxvd1t1XSA9IG1pbihsb3dbdV0sIGxvd1t2XSk7CgkJfQoJfQoJaWYobG93W3VdID09IG51bVt1XSkKCXsKCQlzY2MrKzsKCQl3aGlsZShzdC50b3AoKSAhPSB1KQoJCXsKCQkJaW50IHYgPSBzdC50b3AoKTsKCQkJc3QucG9wKCk7CgkJCXNjY2lkW3ZdID0gc2NjOwoJCX0KCQlpbnQgdiA9IHN0LnRvcCgpOwoJCXN0LnBvcCgpOwoJCXNjY2lkW3ZdID0gc2NjOwoJfQp9CnZvaWQgZGZzMihpbnQgdSkKewoJZm9yKGludCB2IDogZWRbdV0pCgl7CgkJZGZzMih2KTsKCQlzY2N2W3VdICs9IHNjY3Zbdl07CgkJc3pbdV0gKz0gc3pbdl07Cgl9CglhLnB1c2hfYmFjayh7dHBsdCwgc3pbdV0sIHNjY3ZbdV19KTsKfQppbnQzMl90IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWlmKGZvcGVuKCJhY3RuZXQuaW5wIiwgInIiKSkKCXsKCQlmcmVvcGVuKCJhY3RuZXQuaW5wIiwgInIiLCBzdGRpbik7CgkJZnJlb3BlbigiYWN0bmV0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKCX0KCWNpbiA+PiBuID4+IGs7Cglmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKCXsKCQljaW4gPj4gcGFyW2ldOwoJCWlmKHBhcltpXSAhPSBpKSAKCQl7CgkJCWdbaV0ucHVzaF9iYWNrKHBhcltpXSk7CgkJCWdbcGFyW2ldXS5wdXNoX2JhY2soaSk7CgkJfQoJfQoJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiB2W2ldOwoJZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGlmKCF2aXNbaV0pIGRmcyhpLCBpKTsKLy8gCWNvdXQgPDwgc2NjaWRbNV0gPDwgJyAnIDw8IHNjY2lkWzZdIDw8ICdcbic7Cglmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKCXsKCSAgIC8vIGlmKHBhcltpXSA9PSBpKSBpbmRlZ3JlZVtzY2NpZFtpXV0rKzsKCQlpZihzY2NpZFtwYXJbaV1dICE9IHNjY2lkW2ldKQoJCXsKCQkgICAgZWRbc2NjaWRbaV1dLnB1c2hfYmFjayhzY2NpZFtwYXJbaV1dKTsKLy8gCQkJZWRbc2NjaWRbcGFyW2ldXV0ucHVzaF9iYWNrKHNjY2lkW2ldKTsKCQkJaW5kZWdyZWVbc2NjaWRbcGFyW2ldXV0rKzsKCQl9CgkJc2NjdltzY2NpZFtpXV0gKz0gdltpXTsKCQlzeltzY2NpZFtpXV0rKzsKCX0KLy8gCWNvdXQgPDwgaW5kZWdyZWVbM10gPDwgJ1xuJzsKCWZvcihpbnQgaSA9IDE7IGkgPD0gc2NjOyBpKyspCgl7CgkJaWYoaW5kZWdyZWVbaV0gPT0gMCkKCQl7CgkJCXRwbHQrKzsKCQkJZGZzMihpKTsKCQl9Cgl9CglpbnQgbGFzdCA9IDAsIGFucyA9IDA7CglkcFsxXVthWzBdLnN6XSA9IGFbMF0udjsKCWZvcihpbnQgaSA9IDI7IGkgPD0gYS5zaXplKCk7IGkrKykKCXsKCQlmb3IoaW50IGogPSAwOyBqIDw9IGs7IGorKykKCQl7CgkJCWRwW2ldW2pdID0gZHBbaSAtIDFdW2pdOwoJCX0KCQlpZihhW2kgLSAxXS5pZCAhPSBhW2kgLSAyXS5pZCkgbGFzdCA9IGkgLSAxOwoJCWZvcihpbnQgaiA9IDA7IGogPD0gazsgaisrKQoJCXsKCQkJaWYoaiArIGFbaSAtIDFdLnN6IDw9IGspIGRwW2ldW2ogKyBhW2kgLSAxXS5zel0gPSBtYXgoZHBbaV1baiArIGFbaSAtIDFdLnN6XSwgZHBbbGFzdF1bal0gKyBhW2kgLSAxXS52KTsKCQkJYW5zID0gbWF4KGFucywgZHBbaV1bal0pOwoJCX0KCX0KLy8gCWZvcihub2RlIHggOiBhKSBjb3V0IDw8IHguaWQgPDwgJyAnIDw8IHguc3ogPDwgJyAnIDw8IHgudiA8PCAnXG4nOwoJY291dCA8PCBhbnM7CglyZXR1cm4gMDsKfQ==