#include <iostream>
#include <algorithm>
#include <math.h>
#include <stdio.h>

using namespace std;

struct interval{
    int p,k ;
};

double presek(double x1, double y1, double x2, double y2){
    double k ;
    k=max(y1,y2)-min(x1,x2)-y1+x1-y2+x2 ;
   // cout << x1 << " " << y1 << " " << x2 << " " << y2 << endl ;
   // cout << "maxy " << max(y1,y2) << " minx " << min(x1,x2) << " k " << k << endl ;
    if(k>0){
        k=0 ;
    }
    return k ;
}

int main()
{
    int sirina, q, x ;
    double visina, r, p, y, odsecak ;
    cin >> sirina >> visina >> r >> q ;
    double niz[sirina+1] ;
    for(int i=0; i<sirina+1; i++){
        niz[i]=visina ;
    }
    for(int i=0; i<q; i++){
        cin >> p ;
        if(p==2){
            cin >> x;
            if(x>sirina || x<0){
                cout << 0 << endl ;
            }
            else{
                printf("%.10f \n", niz[x]) ;
            }
        }
        if(p==1){
            cin >> x >> y ;
            for(int i=x-r+1; i<x+r; i++){
                if(i>=0 && i<=sirina){
                    odsecak=sqrt(r*r-(i-r)*(i-r)) ;
               //     cout << "r i i-r " << r << " " << i-r << endl ;
               //     cout << "odsecak " << odsecak << " " << presek(y-odsecak,y,0,visina) << endl ;
                    niz[i]=1.0*(visina+presek(y-odsecak,y,0,visina)) ;
                   // cout << "nizodi" << niz[i] << endl ;
                }
            }
        }
       /* for(int i=0; i<sirina+1; i++){
            cout << niz[i] << " " ;
        }
        cout << endl ;*/
    }


    return 0;
}