- #include<cstdio>
- #include<algorithm>
- #include<vector>
- using namespace std;
- struct tri {
- int v[3];
- int&operator[](int i) { return v[i]; }
- tri() { }
- tri(int v0, int v1, int v2) { v[0]=v0; v[1]=v1; v[2]=v2; }
- };
- bool cmp(tri a, tri b)
- {
- for(int i=0; i<3; ++i) if(a[i]<b[i]) return true; else if(a[i]>b[i]) return false;
- return false;
- }
- void rotate(tri& a)
- {
- a=tri(a[1],a[2],a[0]);
- }
- void pushrot(vector<tri>& v)
- {
- tri t=v.back();
- rotate(t); v.push_back(t); rotate(t); v.push_back(t);
- }
- int main()
- {
- tri v;
- while(scanf("%d%d%d", &v[0], &v[1], &v[2]), v[0]) {
- tri p[4];
- for(int i=0; i<4; ++i)
- for(int j=0; j<3; ++j)
- scanf("%d", &p[i][j]);
- sort(p, p+4, cmp);
- do {
- for(int i0=0; i0<3; ++i0) {
- rotate(p[0]);
- for(int i1=0; i1<3; ++i1) {
- rotate(p[1]);
- for(int i2=0; i2<3; ++i2) {
- rotate(p[2]);
- for(int i3=0; i3<3; ++i3) {
- rotate(p[3]);
- vector<tri> t01, t23, t012, t0123;
- if(p[0][0]+p[1][0]==180) {
- t01.push_back(tri(p[1][1], p[0][1]+p[1][2], p[2][0])); pushrot(t01);
- t01.push_back(tri(p[0][1], p[0][2]+p[1][1], p[1][2])); pushrot(t01);
- }
- if(p[2][0]+p[3][0]==180) {
- t23.push_back(tri(p[3][1], p[2][1]+p[3][2], p[2][2])); pushrot(t23);
- t23.push_back(tri(p[2][1], p[2][2]+p[3][1], p[3][2])); pushrot(t23);
- }
- for(int i=0; i<(int)t01.size(); ++i) {
- tri x=t01[i];
- if(x[0]+p[2][0]==180) {
- t012.push_back(tri(p[2][1], x[1]+p[2][2], x[2])); pushrot(t012);
- t012.push_back(tri(x[1], x[2]+p[2][1], p[2][2])); pushrot(t012);
- }
- }
- for(int i=0; i<(int)t01.size(); ++i) {
- for(int j=0; j<(int)t23.size(); ++j) {
- tri x=t01[i], y=t23[j];
- if(x[0]+y[0]==180) {
- t0123.push_back(tri(y[1], x[1]+y[2], x[2]));
- t0123.push_back(tri(x[1], x[2]+y[1], y[2]));
- }
- }
- }
- for(int i=0; i<(int)t012.size(); ++i) {
- tri x=t012[i];
- if(x[0]+p[3][0]==180) {
- t0123.push_back(tri(p[3][1], x[1]+p[3][2], x[2]));
- t0123.push_back(tri(x[1], x[2]+p[3][1], p[3][2]));
- }
- }
- if(p[0][1]+p[1][0]+p[3][2]==180 && p[1][2]+p[2][1]+p[3][0]==180 && p[2][0]+p[3][1]+p[0][2]==180)
- t0123.push_back(tri(p[0][0], p[1][1], p[2][2]));
- if(p[0][1]+p[1][2]==180 && p[1][1]+p[3][0]+p[2][2]==180 && p[2][1]+p[0][2]==180)
- t0123.push_back(tri(p[0][0], p[1][0]+p[3][1], p[2][0]+p[3][2]));
- for(int i4=0; i4<3; ++i4) {
- rotate(v);
- for(int i=0; i<(int)t0123.size(); ++i)
- if(v[0]==t0123[i][0]&&v[1]==t0123[i][1]&&v[2]==t0123[i][2])
- goto yes;
- }
- }
- }
- }
- }
- } while(next_permutation(p, p+4, cmp));
- puts("no"); continue;
- yes:
- puts("yes");
- }
- return 0;
- }