#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
#include<cmath>
#include<set>
#include<fstream>
using namespace std;
ifstream fin("1090.txt");
//#define cin fin
#define MAX 100005
int n;
double p, r;
int level[MAX] = { 0 };
vector<int> follow[MAX];
int main()
{
cin >> n >> p >> r;
int i, j, nn = n;
int max_level = 0;
int root = 0;
int cnt = 0;
queue<int> que, tmp;
for (i = 0; i < n; i++)
{
int tmp; cin >> tmp;
if (tmp != -1)
follow[tmp].push_back(i);
else
root = i;
}
int now_level = 0;
que.push(root);
while (!que.empty())
{
int que_size = que.size();
++now_level;
while (!tmp.empty())
tmp.pop();
while (que_size--)
{
int root = que.front();
int size = follow[root].size();
for (i = 0; i < size; i++)
{
int elem = follow[root][i];
tmp.push(elem);
level[elem] = now_level;
}
que.pop();
}
que = tmp;
}
--now_level;
for (i = 0; i < n;i++)
if (level[i] == now_level)
cnt++;
while (now_level--)
p *= (1 + r / 100);
printf("%.2lf %d", p, cnt);
}
//考试时的做法有超时,可能向上找根确定level的做法会多次调用比较费时。早知用队列不超时就用它了(本来感觉遍历应该很费时的啊).好吧再研究一下