Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"fmt"
)

var scanner= bufio.NewScanner(os.Stdin)

func main() {
	result := make([][]int, 4)
	for i :=range result {
		result[i] = make([]int, 2)
	}
	for scanner.Scan() {
		buf := strings.Split(scanner.Text(), " ")
		l, _ := strconv.ParseFloat(buf[0], 64)
		r, _ := strconv.ParseFloat(buf[1], 64)
		if 1.1 <= l {
			result[0][0]++
		} else if 0.6 <= l && l < 1.1 {
			result[1][0]++
		} else if 0.2 <= l && l < 0.6 {
			result[2][0]++
		} else {
			result[3][0]++
		}
		if 1.1 <= r {
			result[0][1]++
		} else if 0.6 <= r && r < 1.1 {
			result[1][1]++
		} else if 0.2 <= r && r < 0.6 {
			result[2][1]++
		} else {
			result[3][1]++
		}
	}
	ans := make([][]string, 4)
	for i :=range ans {
		ans[i] = make([]string, 2)
	}
	for i := range result {
		for j := range result[i] {
			ans[i][j] = strconv.Itoa(result[i][j])
		}
	}
	for i := 0; i < 4; i++ {
		fmt.Println(strings.Join(ans[i], " "))
	}
}

C++: #include <iostream>
#include <complex>
#include <sstream>
#include <string>
#include <algorithm>
#include <deque>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <vector>
#include <set>
#include <limits>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
#define REP(i, j) for(int i = 0; i < (int)(j); ++i)
#define FOR(i, j, k) for(int i = (int)(j); i < (int)(k); ++i)
#define SORT(v) sort((v).begin(), (v).end())
#define REVERSE(v) reverse((v).begin(), (v).end())
typedef complex<double> P;
const int T = 4;
const int E = 2;

int check(double d){
  if(d >= 1.1) return 0;
  else if(d >= 0.6) return 1;
  else if(d >= 0.2) return 2;
  return 3;
}

int main() {
  int ans[T][E];
  REP(i, T) REP(j, E) ans[i][j] = 0;
  double r, l;
  while(scanf("%lf %lf", &l, &r) != EOF){
    ++ans[check(l)][0];
    ++ans[check(r)][1];
  }
  REP(i, T) cout <<ans[i][0] <<" " <<ans[i][1] <<endl;
  return 0;
}

C++: #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
using namespace std;

#define rep(i,n) for(int (i)=0; (i)<(int)(n); ++(i))
#define foreach(c,i) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)

const float eye[] = { .2f, .6f, 1.1f, (float)(1<<30) };

int main() {
  float l, r;
  int cl[4], cr[4];

  rep (i,4) cl[i] = cr[i] = 0;
  while (cin >> l >> r) {
    int ll = upper_bound(eye, eye + 4, l) - eye;
    int rl = upper_bound(eye, eye + 4, r) - eye;
    cl[3-ll]++;
    cr[3-rl]++;
  }
  rep (i,4) cout << cl[i] << " " << cr[i] << endl;
  return 0;
}

C++: #include<iostream>
using namespace std;

void eyeTest( double a, int* b )
{
    if( a >= 1.1 )
        b[0]++;
    else if( a >= 0.6 )
        b[1]++;
    else if( a >= 0.2 )
        b[2]++;
    else
        b[3]++;
}

int main()
{
    int lj[4] = {0}, rj[4] = {0};
    double l, r;

    while( cin >> l >> r )
    {
        eyeTest( l, lj );
        eyeTest( r, rj );
    }
    for( int i = 0; i < 4; i++ )
        cout << lj[i] << " " << rj[i] << endl;
    return 0;
}

C++: #include <stdio.h>

 int main(void)
 {
 int d[2][4],i,j;
 double m[2];

 for(i=0;i<2;i++)for(j=0;j<4;j++)d[i][j]=0;

 while(1){
 printf("==>");
 if(scanf("%lf %lf",&m[0],&m[1])==EOF)break;
 for(i=0;i<2;i++){
 if(m[i]>=1.1)d[i][0]++;
 if(0.6<=m[i]&&m[i]<1.1)d[i][1]++;
 if(0.2<=m[i]&&m[i]<0.6)d[i][2]++;
 if(m[i]<0.2)d[i][3]++;
 }
 }

 printf("\n????????????\n");
 for(i=0;i<4;i++){
 for(j=0;j<2;j++)printf("%d ",d[j][i]);
 printf("\n");
 }

 return 0;
 }

C++: #include <iostream>
using namespace std;


int main(int argc, const char * argv[]) {
    
    int leftArray[4] = {0},rightArray[4] = {0};
    
    double left,right;
    while (cin >> left >> right) {
        if(left >= 1.1) leftArray[0]++;
        else if(left >= 0.6) leftArray[1]++;
        else if(left >= 0.2) leftArray[2]++;
        else leftArray[3]++;
        
        if(right >= 1.1) rightArray[0]++;
        else if(right >= 0.6) rightArray[1]++;
        else if(right >= 0.2) rightArray[2]++;
        else rightArray[3]++;
            
    }
    
    for(int i=0;i<4;i++){
        cout << leftArray[i] << " " << rightArray[i] << endl;
    }
    
    return 0;
}

C++: #include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>

#define mp       make_pair
#define pb       push_back
#define all(x)   (x).begin(),(x).end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define repi(i,a,b) for(int i = (a); i < (b); i++)

using namespace std;

typedef    long long          ll;
typedef    unsigned long long ull;
typedef    vector<bool>       vb;
typedef    vector<int>        vi;
typedef    vector<vb>         vvb;
typedef    vector<vi>         vvi;
typedef    pair<int,int>      pii;

const int INF=1<<29;
const double EPS=1e-9;

const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};

int main(){
	double a,b;
	int la,ra,lb,rb,lc,rc,ld,rd;
	la=ra=lb=rb=lc=rc=ld=rd=0;
	while(cin>>a>>b){
		if(a>=1.1){
			la++;
		}else if(a>=0.6&&a <1.1){
			lb++;
		}else if(a>=0.2&&a <0.6){
			lc++;
		}else{
			ld++;
		}
		if(b>=1.1){
			ra++;
		}else if(b>=0.6&&b <1.1){
			rb++;
		}else if(b>=0.2&&b <0.6){
			rc++;
		}else{
			rd++;
		}
	}
	cout <<la<<" "<<ra<<endl;
	cout <<lb<<" "<<rb<<endl;
	cout <<lc<<" "<<rc<<endl;
	cout <<ld<<" "<<rd<<endl;
	return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <algorithm>

using namespace std;

int main (int argc, char *argv[]) {
    double lhs, rhs;
    int al = 0;
    int ar = 0;
    int bl = 0;
    int br = 0;
    int cl = 0;
    int cr = 0;
    int dl = 0;
    int dr = 0;
    while (cin>>lhs>>rhs) {
        if (lhs >= 1.1) al++;
        if (rhs >= 1.1) ar++;
        if (1.1 > lhs && lhs >= 0.6) bl++;
        if (1.1 > rhs && rhs >= 0.6) br++;
        if (0.6 > lhs && lhs >= 0.2) cl++;
        if (0.6 > rhs && rhs >= 0.2) cr++;
        if (0.2 > lhs && lhs >= 0.1) dl++;
        if (0.2 > rhs && rhs >= 0.1) dr++;
    }
    cout<<al<<" "<<ar<<endl;
    cout<<bl<<" "<<br<<endl;
    cout<<cl<<" "<<cr<<endl;
    cout<<dl<<" "<<dr<<endl;
    return 0;
}

C++: #include <iostream>
using namespace std;

int main(){
	double left,right;
	int a=0,b=0,c=0,d=0;
	int A=0,B=0,C=0,D=0;
	while(cin >> left >> right){
		if(left >= 1.1)
			a++;
		else if(left >= 0.6)
			b++;
		else if(left >= 0.2)
			c++;
		else
			d++;
		if(right >= 1.1)
			A++;
		else if(right >= 0.6)
			B++;
		else if(right >= 0.2)
			C++;
		else
			D++;
	}
	cout << a << " " << A << endl;
	cout << b << " " << B << endl;
	cout << c << " " << C << endl;
	cout << d << " " << D << endl;		
	return 0;
}

C++: #include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <sstream>
using namespace std;

#define rep(i,n) for(int i=0;i<(int)n;i++)
#define repp(i,k,n) for(int i=k;i<(int)n;i++)
#define rei(n) for(int i=0;i<(int)n;i++)
#define rel(n) for(int l=0;l<(int)n;l++)
#define al(s) s.begin(),s.end()

typedef pair<int, int> pi;
typedef pair<pi, pi> ppi;
typedef pair<int, ppi> pipp;
int a(double w)
{
	if (w >= 1.1)return 0;
	if (w >= 0.6)return 1;
	if (w >= 0.2)return 2;
	return 3;
}

int main()
{
	int R[4] = {};
	int L[4] = {};
	double r, l;
	while (cin >> r >> l)
	{
		R[a(r)]++;
		L[a(l)]++;
	}
	rei(4)
	{
		cout << R[i] << " " << L[i] << endl;
	}
}