#include <cstdio>
#include <algorithm>
using namespace std;
struct rectangle{
long long x0, y0,x1, y1;
rectangle(){
x0 = 0; y0 = 0; x1 = 0; y1 = 0;
}
rectangle(long long _x0, long long _y0, long long _x1, long long _y1){
x0 = _x0; y0 = _y0; x1 = _x1; y1 = _y1;
}
};
inline rectangle Intersection(const rectangle &R1, const rectangle &R2){
long long x0, y0, x1, y1;
x0 = max(R1.x0, R2.x0);
y0 = max(R1.y0, R2.y0);
x1 = min(R1.x1, R2.x1);
y1 = min(R1.y1, R2.y1);
return (x0 > x1 || y0 > y1) ? rectangle() : rectangle(x0, y0, x1, y1);
}
inline long long Area(const rectangle &R){
return ((R.y1 - R.y0) * (R.x1 - R.x0));
}
inline long long Edge(const rectangle &R){
return (((R.y1 - R.y0) + (R.x1 - R.x0)) * 2);
}
int main(){
long long x0, y0, x1, y1, AreaABC, EdgeABC;
rectangle A, B, C, AC, AB, CB, ABC;
freopen("reuniune.in", "r", stdin);
freopen("reuniune.out", "w", stdout);
scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); A = rectangle(x0, y0, x1, y1);
scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); B = rectangle(x0, y0, x1, y1);
scanf("%lld %lld %lld %lld", &x0, &y0, &x1, &y1); C = rectangle(x0, y0, x1, y1);
AC = Intersection(A, C);
AB = Intersection(A, B);
CB = Intersection(C, B);
ABC = Intersection(AC, B);
AreaABC = Area(A) + Area(B) + Area(C) - Area(AC) - Area(AB) - Area(CB) + Area(ABC);
EdgeABC = Edge(A) + Edge(B) + Edge(C) - Edge(AC) - Edge(AB) - Edge(CB) + Edge(ABC);
printf("%lld %lld", AreaABC, EdgeABC);
return 0;
}