#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("reuniune.in","r");
FILE*g=fopen("reuniune.out","w");
int x[10],y[10],nrx,nry;
struct drept{
int x1,y1;
int x2,y2;
}A[5];
inline void unic ( int *A , int &N ){
int n = 0;
for ( int i = 1 ; i <= N ; ++i ){
if ( A[i] != A[i-1] || i == 1 ){
A[++n] = A[i];
}
}
N = n;
}
inline long long per_inters ( drept A , drept B ){
int X1 = max(A.x1,B.x1),X2 = min(A.x2,B.x2);
int Y1 = max(A.y1,B.y1),Y2 = min(A.y2,B.y2);
if ( X1 > X2 || Y1 > Y2 ) return 0;
return X2-X1+Y2-Y1;
}
inline long long per_inters ( drept A , drept B , drept C ){
int X1 = max(A.x1,B.x1),X2 = min(A.x2,B.x2);
int Y1 = max(A.y1,B.y1),Y2 = min(A.y2,B.y2);
int X3 = max(X1,C.x1),X4 = min(X2,C.x2);
int Y3 = max(Y1,C.y1),Y4 = min(Y2,C.y2);
if ( X3 > X4 || Y3 > Y4 ) return 0;
return X4-X3+Y4-Y3;
}
int main () {
for ( int i = 1 ; i <= 3 ; ++i ){
fscanf(f,"%d %d %d %d",&A[i].x1,&A[i].y1,&A[i].x2,&A[i].y2);
x[++nrx] = A[i].x1; x[++nrx] = A[i].x2;
y[++nry] = A[i].y1; y[++nry] = A[i].y2;
}
sort(x+1,x+nrx+1);
sort(y+1,y+nry+1);
unic(x,nrx);
unic(y,nry);
long long arie = 0;
for ( int i = 1 ; i < nrx ; ++i ){
for ( int j = 1 ; j < nry ; ++j ){
for ( int d = 1 ; d <= 3 ; ++d ){
if ( A[d].x1 <= x[i] && x[i+1] <= A[d].x2 && A[d].y1 <= y[j] && A[d].y2 <= y[j+1] ){
arie += 1LL*(x[i+1]-x[i])*(y[j+1]-y[j]);
}
}
}
}
fprintf(g,"%lld ",arie);
long long p = per_inters(A[1],A[1]) + per_inters(A[2],A[2]) + per_inters(A[3],A[3]) - per_inters(A[1],A[2]) - per_inters(A[1],A[3]) - per_inters(A[2],A[3]) + per_inters(A[1],A[2],A[3]);
fprintf(g,"%lld\n",p<<1);
fclose(f);
fclose(g);
return 0;
}