using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class TEST{
	static void Main(){
		Sol mySol =new Sol();
		mySol.Solve();
	}
}

class Sol{
	public void Solve(){
		
		int cnt=0;
		int gcd=calgcd(P,Q);
		
		for(int i=0;i<N;i++){
			
			// P==0かつQ==0 なら (0,0)のみ到達可能
			if(P==0 && Q==0){
				if(X[i]==0 && Y[i]==0)cnt++;
				continue;
			}
			
			// P==0またはQ==0の場合、P>0(resp. Q>0)なら(X,Y)が単位長P(resp. Q)の格子点上なら到達可能
			if(P==0 || Q==0){
				if(P>0 && X[i]%P==0 && Y[i]%P==0)cnt++;
				if(Q>0 && X[i]%Q==0 && Y[i]%Q==0)cnt++;
				continue;
			}
			
			//P,Q>0の場合
			// 単位長 gcd の格子点上でないならNG
			if(X[i]%gcd!=0 || Y[i]%gcd!=0)continue;
			
			int P0=P/gcd;
			int Q0=Q/gcd;
			int X0=X[i]/gcd;
			int Y0=Y[i]/gcd;
			
			//  P0が偶数 または Q0が偶数 なら、単位長 gcd の格子点上ならOK
			if(P0%2==0 || Q0%2==0){
				cnt++;
				continue;
			}
			
			//  P0が奇数 かつ Q0が奇数 の時は 格子点のうち (偶数,偶数) (奇数,奇数)の点のみ到達可能
			if((X0+Y0)%2==0){
				cnt++;
				continue;
			}
		
		}
		
		Console.WriteLine(cnt);
		
	}
	
	static int calgcd(int a,int b){
		return a==0?b:calgcd(b%a,a);
	}
	
	int P,Q;
	int N;
	int[] X,Y;
	
	public Sol(){
		var d=ria();
		P=d[0];Q=d[1];
		N=ri();
		X=new int[N];
		Y=new int[N];
		for(int i=0;i<N;i++){
			var dd=ria();
			X[i]=dd[0];Y[i]=dd[1];
		}
	}

	static int ri(){return int.Parse(Console.ReadLine());}
	static int[] ria(){return Array.ConvertAll(Console.ReadLine().Split(' '),e=>int.Parse(e));}
}