def pairSum(array,target,currentIndex):
start=0
end=len(array)-1
while(start<end):
if start==currentIndex:
start+=1
continue
if end==currentIndex:
end-=1
continue
if array[start]+array[end]==target:
return [array[start],array[end]]
elif array[start]+array[end]<target:
start+=1
elif array[start]+array[end]>target:
end-=1
return [-1,-1]
def tripletSum(array, target):
countOfTriplets = 0
for i in range(len(array)):
newTarget = target - array[i]
pairForNewTarget = pairSum(array,newTarget,i)
if(pairForNewTarget[0]!=-1):
countOfTriplets+=1
if countOfTriplets >0 :
return countOfTriplets//3
else:
return 0
def wrapperFunction():
array = [int(i) for i in input().split()]
target = int(input())
array.sort()
pair = pairSum(array,target,-1)
numberOfTriplets = tripletSum(array, target)
print("There exists a pair (" + str(pair[0]) + ", " + str(pair[1]) + ") whose sum is equal to target.")
print("There exists total " + str(numberOfTriplets) + " triplets whose sum is equal to target." )
wrapperFunction()
ZGVmIHBhaXJTdW0oYXJyYXksdGFyZ2V0LGN1cnJlbnRJbmRleCk6CglzdGFydD0wCgllbmQ9bGVuKGFycmF5KS0xCgl3aGlsZShzdGFydDxlbmQpOgoJCWlmIHN0YXJ0PT1jdXJyZW50SW5kZXg6CgkJCXN0YXJ0Kz0xCgkJCWNvbnRpbnVlCgkJaWYgZW5kPT1jdXJyZW50SW5kZXg6CgkJCWVuZC09MQoJCQljb250aW51ZQoJCWlmIGFycmF5W3N0YXJ0XSthcnJheVtlbmRdPT10YXJnZXQ6CgkJCXJldHVybiBbYXJyYXlbc3RhcnRdLGFycmF5W2VuZF1dCgkJZWxpZiBhcnJheVtzdGFydF0rYXJyYXlbZW5kXTx0YXJnZXQ6CgkJCXN0YXJ0Kz0xCgkJZWxpZiBhcnJheVtzdGFydF0rYXJyYXlbZW5kXT50YXJnZXQ6CgkJCWVuZC09MQoJcmV0dXJuIFstMSwtMV0KCmRlZiB0cmlwbGV0U3VtKGFycmF5LCB0YXJnZXQpOgoJY291bnRPZlRyaXBsZXRzID0gMAoJZm9yIGkgaW4gcmFuZ2UobGVuKGFycmF5KSk6CgkJbmV3VGFyZ2V0ID0gdGFyZ2V0IC0gYXJyYXlbaV0KCQlwYWlyRm9yTmV3VGFyZ2V0ID0gcGFpclN1bShhcnJheSxuZXdUYXJnZXQsaSkKCQlpZihwYWlyRm9yTmV3VGFyZ2V0WzBdIT0tMSk6CgkJCWNvdW50T2ZUcmlwbGV0cys9MQoJaWYgY291bnRPZlRyaXBsZXRzID4wIDoKCQlyZXR1cm4gY291bnRPZlRyaXBsZXRzLy8zCgllbHNlOgoJCXJldHVybiAwCgpkZWYgd3JhcHBlckZ1bmN0aW9uKCk6CglhcnJheSA9IFtpbnQoaSkgZm9yIGkgaW4gaW5wdXQoKS5zcGxpdCgpXQoJdGFyZ2V0ID0gaW50KGlucHV0KCkpCglhcnJheS5zb3J0KCkKCXBhaXIgPSBwYWlyU3VtKGFycmF5LHRhcmdldCwtMSkKCW51bWJlck9mVHJpcGxldHMgPSB0cmlwbGV0U3VtKGFycmF5LCB0YXJnZXQpCglwcmludCgiVGhlcmUgZXhpc3RzIGEgcGFpciAoIiArIHN0cihwYWlyWzBdKSArICIsICIgKyBzdHIocGFpclsxXSkgKyAiKSB3aG9zZSBzdW0gaXMgZXF1YWwgdG8gdGFyZ2V0LiIpCglwcmludCgiVGhlcmUgZXhpc3RzIHRvdGFsICIgKyBzdHIobnVtYmVyT2ZUcmlwbGV0cykgKyAiIHRyaXBsZXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0YXJnZXQuIiApCgp3cmFwcGVyRnVuY3Rpb24oKQ==