#include <bits/stdc++.h> 
 
#define fi first 
#define se second 
#define mp make_pair 
#define pb push_back 
#define lb lower_bound 
#define ub upper_bound 
#define sqr(x) (x)*(x) 
#define lowbit(x) (x)&(-x) 
#define pii pair<int, int> 
#define ls(a,b) (((a)+(b)) << 1) 
#define rs(a,b) (((a)+(b)) >> 1) 
#define fin(a) freopen(a,"r",stdin); 
#define fout(a) freopen(a,"w",stdout); 
#define FORP(i,a,b) for(int i=(a);i<=(b);i++) 
#define FORM(i,a,b) for(int i=(a);i>=(b);i--) 
 
#define maxn 1000005 
#define maxm 100005 
#define MOD 1000000007 
#define INF 1070000000 
using namespace std; 
typedef long long ll; 
typedef unsigned long long ull; 
 
template<class T> inline   
void read(T& num){   
    num = 0; bool f = 1;char ch = getchar();   
    while(ch < '0' || ch > '9') { if(ch == '-') f = 0;ch = getchar();}   
    while(ch >= '0' && ch <= '9') {num = num * 10 + ch - '0';ch = getchar();}   
    num = f ? num: -num;   
}  
template<class T> inline 
void write(T x,char ch){ 
	int s[100]; 
	if (x==0) {putchar('0'); putchar(ch); return;} 
	if (x<0) {putchar('-'); x=-x;} int num=0; 
	while (x){ s[num++]=(x%10); x=x/10;} 
	FORM(i,num-1,0) putchar(s[i]+'0'); putchar(ch); 
} 
#define y1 hhf
int n, a[10], ex, ey;
struct line{
	int x1,y1,x2,y2;
	int t;
}l[10],m[10];
struct ins{
	int x;
	int t;
};
void ref(int &x,int&y,line l){
	if(l.t==1){
		x=l.x1*2-x;
	}else{
		y=l.y1*2-y;
	}
}
void ref(line &a,line b){
	ref(a.x1,a.y1,b);
	ref(a.x2,a.y2,b);		
}
int main(){
	cin>>n>>ex>>ey;
	for(int i=1;i<=n;i++){
		cin>>l[i].x1>>l[i].y1>>l[i].x2>>l[i].y2;
		if(l[i].x1==l[i].x2) l[i].t=1;
		else if(l[i].y1==l[i].y2) l[i].t=2;			
		if(ex<0) l[i].x1=-l[i].x1, l[i].x2=-l[i].x2;
		if(ey<0) l[i].y1=-l[i].y1, l[i].y2=-l[i].y2;
		if(l[i].x1>l[i].x2) swap(l[i].x1,l[i].x2);
		if(l[i].y1>l[i].y2) swap(l[i].y1,l[i].y2);
	}
	if(ex<0) ex=-ex;
	if(ey<0) ey=-ey;
	for(int i=1;i<=n;i++) a[i]=i;
	int ans=-1;
	do{
		for(int nn=0;nn<=n;nn++){
			int x,y;
			x=ex,y=ey;
			for(int i=1;i<=nn;i++) ref(x,y,l[a[i]]);
			int ok=0,cnt=0;
			for(int i=1;i<=nn;i++) m[i]=l[i];
			double mx=0,my=0;
			for(int i=1;i<=nn;i++){
				int fst=-1;
				double fx=1e100;
				double fy=fx;
				for(int k=1;k<=nn;k++){
					if(m[k].t==1){
						if(m[k].x1<mx||m[k].x1>=ex) continue;
						if(ey*m[k].x1>=m[k].y1*ex&&ey*m[k].x1<=m[k].y2*ex){
							double nx=m[k].x1;
							double ny=nx*ey/ex;
							if(nx<fx){
								fx=nx;
								fy=ny;
								fst=k;
							}
						}
						
					}else{
						if(m[k].y1<my||m[k].y1>=ey) continue;
						if(ex*m[k].y1>=m[k].x1*ey&&ex*m[k].y1<=m[k].x2*ey){
							double ny=m[k].y1;
							double nx=ny*ex/ey;
							if(nx<fx){
								fx=nx;
								fy=ny;
								fst=k;
							}
						}
					}
				}
				if(fst>0){
					cnt++;
				}else break;
				mx=fx;
				my=fy;
				for(int j=1;j<=n;j++) ref(m[j],l[a[i]]);
			}
			if(cnt==nn){
				ans=max(ans,nn);
			}
		}
	}while(next_permutation(a+1,a+n+1));
	if(ans>=0)cout<<ans<<endl;
	else cout<<"impossible"<<endl;
	return 0;
}
