#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define map unordered_map
#define F first
#define S second
#define M 1000000007

vector <pair<int,int>> v(300005);
vector <int> d(300005);
vector <vector <int>> tr(300005, vector<int>(20,0));

signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

	int q,a,b,p;
	cin >> q >> a >> b;
	v[0] = {a,b};

	for(int i=1; i<=q; i++){
		int t;
		cin >> t;
		if(t==1){
			cin >> p >> a >> b;
			// d[i] = p;
			tr[i][0] = p;
			int x=0;
			while(tr[p][x]!=0){
				tr[i][x+1] = tr[p][x];
				p = tr[p][x];
				x++;
			}

			v[i] = {a,b};
		}
		else{
			cin >> p >> a;

			int cq=0, cost=0;

			while(cq<a){
				int x = p;

				while(1){
					int i=0;
					while(i<20 && v[tr[x][i]].F>0){
						i++;
					}

					if(i==0)
						break;

					i--;
					x = tr[x][i];
					if(x==0)
						break;
				}

				// cout << x << " ";

				int q = min(a-cq,v[x].F);
				cq += q;
				v[x].F -= q;
				cost += q*v[x].S;

				if(x==p)
					break;
			}


			// stack <int> s;
			// s.push(p);
			// while(p!=0 && v[p].F>0){
			// 	p = d[p];
			// 	s.push(p);
			// }

			// int cq = 0, cos = 0;

			// while(a>0 && !s.empty()){
			// 	int x = min(v[s.top()].F,a);
			// 	a -= x;
			// 	v[s.top()].F -= x;
			// 	cq += x;
			// 	cos += x*v[s.top()].S;
			// 	s.pop();
			// }

			// while(!s.empty())
			// 	s.pop();

			cout << cq << ' ' << cost << endl;
		}
	}
    
    

    return 0;
}