#include<bits/stdc++.h>
using namespace std;
int Son[100010][50];
long long Ans[100010][50];
int Min[100010][50];
long long w1(int Cur, long long k)
{
if (k == 0)
{
return 0;
}
int xx = 0;
long long x = 1;
while (x <= k)
{
xx++;
x <<= 1;
}
xx--;
x >>= 1;
return Ans[Cur][xx] + w1(tr[Cur][xx], k - x);
}
int w2(int Cur, long long k)
{
if (k == 0)
{
return 2147483647;
}
int xx = 0;
long long x = 1;
while (x <= k)
{
xx++;
x <<= 1;
}
xx--;
x >>= 1;
return min(Min[Cur][xx], w2(tr[Cur][xx], k - x));
}
int main()
{
freopen("pathsjump.in","r",stdin);
freopen("pathsjump.out","w",stdout);
int n;
long long k;
scanf("%d %I64d", &n, &k);
for (int i = 0; i < n; i++)
{
scanf("%d", &tr[i][0]);
}
for (int i = 0; i < n; i++)
{
scanf("%I64d", &Ans[i][0]);
Min[i][0] = Ans[i][0];
}
for (int t = 1; t <= 40; t++)
{
for (int i = 0; i < n; i++)
{
tr[i][t] = tr[tr[i][t - 1]][t - 1];
}
}
for (int t = 1; t <= 40; t++)
{
for (int i = 0; i < n; i++)
{
Ans[i][t] = Ans[i][t - 1] + Ans[tr[i][t - 1]][t - 1];
}
}
for (int t = 1; t <= 40; t++)
{
for (int i = 0; i < n; i++)
{
Min[i][t] = min(Min[i][t - 1], Min[tr[i][t - 1]][t - 1]);
}
}
for (int i = 0; i < n; i++)
{
printf("%I64d %d\n", w1(i, k), w2(i, k));
}
return 0;
}