#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <cmath>
const int maxen = 100010;
using namespace std;
struct node
{
int layer;
vector<int> child;
}Node[maxen];
void Layerorder(int root);
int main()
{
int n,num,root=-1;
double price,rate;
scanf("%d%lf%lf",&n,&price,&rate);
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
if(temp==-1)
root = i;
else
Node[temp].child.push_back(i);
}
Layerorder(root);
int hashTable[maxen]={0};
int Max = 0;
for(int i=0;i<n;i++)
{
if(Max<Node[i].layer)
{
Max=Node[i].layer;
}
hashTable[Node[i].layer]++;
}
printf("%.2f %d",price*pow((1+0.01*rate),Max),hashTable[Max]);
return 0;
}
void Layerorder(int root)
{
queue<int> q;
q.push(root);
Node[root].layer=0;
while(!q.empty())
{
int front = q.front();
q.pop();
for(int i=0;i<Node[front].child.size();i++)
{
int child = Node[front].child[i];
Node[child].layer = Node[front].layer + 1;
q.push(child);
}
}
}