#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
struct Node{
double price;
vector<int> son;
}node[100010];
int N, cnt = 0;;
double sing, high, maxp = -1;
int root[100010];
void levelOrder(int index){
node[index].price = sing;
queue<int> q;
q.push(index);
while(!q.empty()){
index = q.front();
q.pop();
int len = node[index].son.size();
if(len > 0){
int temp;
double price = node[index].price;
for(int i = 0; i < len; i++){
temp = node[index].son[i];
node[temp].price = price*(1+high);
q.push(temp);
}
}else if(len == 0){
if(maxp < node[index].price){
maxp = node[index].price; cnt = 1;
}else if(maxp == node[index].price)
cnt++;
}
}
}
int main(){
scanf("%d %lf %lf", &N, &sing, &high);
high /= 100;
int first;
for(int i = 0; i < N; i++){
scanf("%d", &root[i]);
if(root[i] == -1) first = i;
else node[root[i]].son.push_back(i);
}
levelOrder(first);
printf("%.2f %d\n", maxp, cnt);
return 0;
}