#include<cstdio>
long long A, P;
struct drept
{
long long x1, y1, x2, y2;
}d1, d2, d3;
inline long long min(long long a, long long b)
{
if(a < b)
return a;
return b;
}
inline long long max(long long a, long long b)
{
if(a > b)
return a;
return b;
}
void citire()
{
scanf("%lld%lld%lld%lld", &d1.x1, &d1.y1, &d1.x2, &d1.y2);
scanf("%lld%lld%lld%lld", &d2.x1, &d2.y1, &d2.x2, &d2.y2);
scanf("%lld%lld%lld%lld", &d3.x1, &d3.y1, &d3.x2, &d3.y2);
}
drept reun(drept d1, drept d2)
{
drept d;
d.x1 = max(d1.x1, d2.x1);
d.y1 = max(d1.y1, d2.y1);
d.x2 = min(d1.x2, d2.x2);
d.y2 = min(d1.y2, d2.y2);
if(d.x2 < d.x1 || d.y2 < d.y1)
d.x1 = d.y1 = d.x2 = d.y2 = 0;
return d;
}
long long arie(drept d)
{
return((d.x2 - d.x1)*(d.y2 - d.y1));
}
long long perimetru(drept d)
{
return(2*(d.x2 - d.x1 + d.y2 - d.y1));
}
void rezolva()
{
A = arie(d1) + arie(d2) + arie(d3) - arie(reun(d1, d2)) - arie(reun(d1, d3)) - arie(reun(d2, d3)) + arie(reun(reun(d1, d2), d3));
P = perimetru(d1) + perimetru(d2) + perimetru(d3) - perimetru(reun(d1, d2)) - perimetru(reun(d1, d3)) - perimetru(reun(d2, d3)) + perimetru(reun(reun(d1, d2), d3));
}
void scrie()
{
printf("%lld %lld", A, P);
}
int main()
{
freopen("reuniune.in", "r", stdin);
freopen("reuniune.out", "w", stdout);
citire();
rezolva();
scrie();
return 0;
}