Encoding a pair, (a,b), in LC means representing a pair as a function that will later allow extraction of its components.
cpair := λabs.sab = λa.λb.λs.sab
cpair is a constructor function, it constructs a pair given 2 values (a and b) as pair's components, and a selector function s that will extract the components. The second form more explicitly showcases the eventual currying of the cpair function; e.g. providing just the first component (as X) returns the function that expects the second component (λb.λs.sXb); if the value for the second component is then supplied, a function that expects the selector function is returned (with both components fixed).
(((λa.λb.λs.s a b) X) Y)
(( λb.λs.s X b) Y)
( λs.s X Y)
(((λa.λb.λs.sab) X) Y) ~~> λs.sXY
((λa.λb.λs.sab) X) ~~> λb.λs.sXb
((λb.λs.sXb) Y) ~~> λs.sXY
fst := (λab.a) (kestrel, true)
snd := (λab.b) (kite, false, zero)
cpair(fst p)(snd p) = p