#include <bits/stdc++.h>
#define ll long long int
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
ll mx(ll a,ll b,ll c)
{
return max(max(a,b),c);
}
ll mn(ll a,ll b,ll c)
{
return min(min(a,b),c);
}
struct dr
{
ll x1,y1,x2,y2;
};
ll getArea(dr a)
{
return (a.x2-a.x1)*(a.y2-a.y1);
}
ll getPerim(dr a)
{
return ((a.x2-a.x1)+(a.y2-a.y1))*2;
}
dr intersection(dr a,dr b)
{
if(a.x1 > b.x2 || b.x1 > a.x2 || a.y1 > b.y2 || b.y1 > a.y2)
{
return {0,0,0,0};
}
return {max(a.x1,b.x1),max(a.y1,b.y1),min(a.x2,b.x2),min(a.y2,b.y2)};
}
bool nul(dr a)
{
return !a.x1 && !a.x2 && !a.y1 && !a.y2;
}
dr intersection2(dr a,dr b,dr c)
{
if(nul(intersection(a,b)) || nul(intersection(b,c)) || nul(intersection(a,c)))
{
return {0,0,0,0};
}
return {mx(a.x1,b.x1,c.x1),mx(a.y1,b.y1,c.y1),mn(a.x2,b.x2,c.x2),mn(a.y2,b.y2,c.y2)};
}
int main()
{
dr a,b,c;
fin >> a.x1 >> a.y1 >> a.x2 >> a.y2;
fin >> b.x1 >> b.y1 >> b.x2 >> b.y2;
fin >> c.x1 >> c.y1 >> c.x2 >> c.y2;
ll res=0;
res = getArea(a) + getArea(b) + getArea(c) - getArea(intersection(a,b)) - getArea(intersection(b,c)) - getArea(intersection(a,c)) + getArea(intersection2(a,b,c));
fout << res << "\n";
res = getPerim(a) + getPerim(b) + getPerim(c) - getPerim(intersection(a,b)) - getPerim(intersection(b,c)) - getPerim(intersection(a,c)) + getPerim(intersection2(a,b,c));
fout << res;
}