Harryxun/stf_run huggingface dataset:
x,n = map(int,input().split())

arr = [x]
tmp = input()
num = tmp.split(' ')
num_li = [int(i) for i in num]
arr.extend(num_li)

arr.sort()
arr = list(set(arr))

min = x
max = x

for i in range(10000):
    if len(arr) == 1:
        print(x)
        break

    min -= 1
    max += 1
    
    try:
        arr.index(min)
    except:
        print(min)
        break

    try:
        arr.index(max)
    except:
        print(max)
        break

### FIXED CODE ###

x,n = map(int,input().split())

arr = []

if n == 0:
    print(x)
else:
    tmp = input()
    num = tmp.split(' ')
    num_li = [int(i) for i in num]
    arr.extend(num_li)

    for i in range(10000):

        if x - i not in arr:
            print(x - i)
            break

        if x + i not in arr:
            print(x + i)
            break
A,B=map(int,input().split())

def int_to_bit(N):
  lst=[]
  ans=''
  while N!=1 and N!=0:
    lst.append(str(N%2))
    N//=2
  for i in range(1,len(lst)+1):
    ans+=lst[-i]
  if N==0:
    pass
  else:
    ans='1'+ans
  return int(ans)

def bit_to_int(N):
  N=str(N)
  ans=0
  for i in range(len(N)):
    ans+=int(N[i])*2**(len(N)-1-i)
  return ans

def XOR(a,b):
  a,b=min(a,b),max(a,b)
  a,b=str(a),str(b)
  length=len(a)
  lst=[]
  ans=''
  for i in range(1,length+1):
    if a[-i]==b[-i]=='1' or a[-i]==b[-i]=='0':
      lst.append('0')
    else:
      lst.append('1')
  for i in range(1,length+1):        # ここ下手
    ans+=lst[-i]
  if length==len(b):
    pass
  else:
    add=b[0:len(b)-length]
    ans=add+ans
  return ans

List=[A+i for i in range(B-A+1)]
while len(List)>1:
  v1=int_to_bit(List[0])
  v2=int_to_bit(List[1])
  v=bit_to_int(XOR(v1,v2))        # ここ下手
  List.pop(0)
  List.pop(0)
  List.insert(0,v)
  
print(List[0])

### FIXED CODE ###

A,B=map(int,input().split())

def int_to_bit(N):
  lst=[]
  ans=''
  if N==0:
    return 0
  while N!=1 and N!=0:
    lst.append(str(N%2))
    N//=2
  for i in range(1,len(lst)+1):
    ans+=lst[-i]
  if N==0:
    pass
  else:
    ans='1'+ans
  return int(ans)

def bit_to_int(N):
  N=str(N)
  ans=0
  for i in range(len(N)):
    ans+=int(N[i])*2**(len(N)-1-i)
  return ans

def XOR(a,b):
  a,b=min(a,b),max(a,b)
  a,b=str(a),str(b)
  length=len(a)
  lst=[]
  ans=''
  for i in range(1,length+1):
    if a[-i]==b[-i]=='1' or a[-i]==b[-i]=='0':
      lst.append('0')
    else:
      lst.append('1')
  for i in range(1,length+1):        
    ans+=lst[-i]
  if length==len(b):
    pass
  else:
    add=b[0:len(b)-length]
    ans=add+ans
  return bit_to_int(ans)

if A%2==0 and B%2==0:
  v=(B-A)//2
  if v%2==0:
    print(B)
  else:
    print(XOR(1,int_to_bit(B)))
elif A%2==0 and B%2==1:
  v=(B-A+1)//2
  if v%2==0:
    print(0)
  else:
    print(1)
elif A%2==1 and B%2==0:
  v=(B-1-A)//2
  if v%2==0:
    print(XOR(int_to_bit(A),int_to_bit(B)))
  else:
    print(XOR(1,int_to_bit(XOR(int_to_bit(A),int_to_bit(B)))))
else:
  v=(B-A)//2
  if v%2==0:
    print(A)
  else:
    print(XOR(int_to_bit(A),1))
n=int(input())

a= list(map(int,input().split()))

plus = []

minas = []

for value in a:
    if value < 0:
        minas.append(abs(value))
    else:
        plus.append(value)

if len(minas)%2 == 0:
    ans = sum(plus)+sum(minas)
else:
    mini = min(min(plus),min(minas))
    ans = sum(plus)+sum(minas)-mini*2

print(ans)

### FIXED CODE ###

n=int(input())

t = list(map(int,input().split()))

s = 0
mini = 10000000000000
count = 0
for i in t:
    if i < 0:
        count += 1
    s += abs(i)
    mini = min(mini, abs(i))
if count%2 == 0:
    print(s)
else:
    print(s-mini*2)
N = int(input())

for k in range(2, N + 1):
    slen = k - 1
    if k * slen == 2 * N:
        print("Yes")
        print(k)
        x = [0] * N
        for i in range(k):
            s = [None] * slen
            for j in range(slen):
                n = (i + j) % N
                if x[n] < 2:
                    s[j] = str(n)
                    x[n] += 1
            print(slen, " ".join(s))
        break
else:
    print("No")

### FIXED CODE ###

N = int(input())
for k in range(1, N + 2):
    sn = k - 1
    if k * sn != 2 * N:
        continue

    print("Yes")
    print(k)
    s = [[0] * sn for _ in range(sn)]
    for i in range(sn):
        s[i][i] = s[i-1][i-1] + (i + 1)
        for j in range(i + 1, sn):
            s[i][j] = s[i][j-1] + j
            s[j][i] = s[i][j]
    s.append([s[i][i] for i in range(sn)])
    for x in s:
        print(sn, " ".join(map(str, x)))
    break
else:
    print("No")
n=int(input())
V=list(map(int, input().split()))
C=list(map(int, input().split()))

sum=0
for i in range(n):
  if V[i]>C[i]:
      sum+=V[i]-C[i]
print(sum)    

### FIXED CODE ###

a,b,t=list(map(int, input().split()))
print((t//a)*b)
st = input()
for i in range(0x61,0x7b):
    print("%c : %d", %(i,st.count(str(i))))


### FIXED CODE ###

import sys

data = sys.stdin.read()
for i in range(0x61,0x7b):
    print("%c : %d"  %(i,data.lower().count(chr(i))))
import numpy as np
import sys

def intinput():
    return map(int,sys.stdin.readline().split())

n,m=intinput()
a = list(intinput())
x = np.zeros((2,m),int)
for i in range(m):
    x[0,i],x[1,i]=intinput()
y = np.empty(n+np.sum(x[0]),int)
y[0:n]=a
x = x.T
k = 0
for i in x:
    y[n+k:n+k+i[0]]=i[1]
    k+=i[0]
y=np.sort(y)[::-1]
print(np.sum(y[0:n]))

### FIXED CODE ###

import sys

def intinput(): return map(int,sys.stdin.readline().split())

n,m=intinput()
a = list(intinput())
a = [(a[x],1) for x in range(n)]
for i in range(m):
    b,c=intinput()
    a.append((c,b))
a.sort(reverse=1)
res,cnt=0,n
for (x,y) in a:
    k = min(cnt,y)
    res += k*x
    cnt -= k
print(res)
def nikkei19q_b():
    _ = int(input())
    D = list(map(int, input().split()))
    div = 998244353

    dmax = max(D)
    cntr = [0] * (dmax + 1)
    for d in D: cntr[d] += 1  # カウンター

    if D[0] != 0: return 0  # 最初に入力される頂点1は距離0マスト
    if cntr[0] != 1: return 0  # 距離0が無い、または2つ以上、はおかしい

    ans = 1
    for i in range(1, dmax+1):
        if cntr[i] == 0: return 0  # カウント0だとつながらないのでNG
        ans = ans * (cntr[i-1][1] ** cntr[i][1]) % div
    print(ans)

nikkei19q_b()

### FIXED CODE ###

def nikkei19q_b():
    _ = int(input())
    D = list(map(int, input().split()))
    div = 998244353

    dmax = max(D)
    cntr = [0] * (dmax + 1)
    for d in D: cntr[d] += 1  # カウンター

    if D[0] != 0: return 0  # 最初に入力される頂点1は距離0マスト
    if cntr[0] != 1: return 0  # 距離0が無い、または2つ以上、はおかしい

    ans = 1
    for i in range(1, dmax+1):
        if cntr[i] == 0: return 0  # カウント0だとつながらないのでNG
        ans = ans * (cntr[i-1] ** cntr[i]) % div
    return ans

print(nikkei19q_b())
N=input()
i = 3
j = 5
k = 15
total3 = 0
total5 = 0
total15 = 0
while i<=N:
  total3 += i
  i = i + 3
while j<=N:
  total5 += j
  j = j + 5
while k<=N:
  total15 += k
  k = k + 15
N_sum = (1 + N) * N / 2

ans = N_sum - i - j + k

print(ans)


### FIXED CODE ###

N=input()
s=str(N)
s1=s[-1]
s2=s[-2]
s3=s[-3]
if s1 == '7':
    print('Yes')
elif s2 == '7':
    print('Yes')
elif s3=='7':
    print('Yes')
else:
    print('No')
A_1 = list(map(int, input().split()))
A_2 = list(map(int, input().split()))
A_3 = list(map(int, input().split()))
N = int(input())
b = [(int(input())) for _ in range(N)]
for i in range(3):
    for j in range(N):
        if A_1[i] == b[j]:
            A_1[i] = "a"
        elif A_2[i] == b[j]:
            A_2[i] = "a"
        elif A_3[i] == b[j]:
            A_3[i] = "a"
print(A_1, A_2, A_3)

if A_1[0] == A_1[1] == A_1[2]:
    print("Yes")
elif A_2[0] == A_2[1] == A_2[2]:
    print("Yes")
elif A_3[0] == A_3[1] == A_3[2]:
    print("Yes")
elif A_1[0] == A_2[0] == A_3[0]:
    print("Yes")
elif A_1[1] == A_2[1] == A_3[1]:
    print("Yes")
elif A_1[2] == A_2[2] == A_3[3]:
    print("Yes")
elif A_1[0] == A_2[1] == A_3[2]:
    print("Yes")
elif A_1[2] == A_2[1] == A_3[0]:
    print("Yes")
else:
    print("No")


### FIXED CODE ###

A_1 = list(map(int, input().split()))
A_2 = list(map(int, input().split()))
A_3 = list(map(int, input().split()))
N = int(input())
b = [(int(input())) for _ in range(N)]
for i in range(3):
    for j in range(N):
        if A_1[i] == b[j]:
            A_1[i] = 1
        elif A_2[i] == b[j]:
            A_2[i] = 1
        elif A_3[i] == b[j]:
            A_3[i] = 1


if A_1[0] == A_1[1] == A_1[2]:
    print("Yes")
elif A_2[0] == A_2[1] == A_2[2]:
    print("Yes")
elif A_3[0] == A_3[1] == A_3[2]:
    print("Yes")
elif A_1[0] == A_2[0] == A_3[0]:
    print("Yes")
elif A_1[1] == A_2[1] == A_3[1]:
    print("Yes")
elif A_1[2] == A_2[2] == A_3[2]:
    print("Yes")
elif A_1[0] == A_2[1] == A_3[2]:
    print("Yes")
elif A_1[2] == A_2[1] == A_3[0]:
    print("Yes")
else:
    print("No")
S = input()
price = 700 + 100*s.count('o')
print(price)

### FIXED CODE ###

S = input()
price = 700 + 100*S.count('o')
print(price)
N,M=map(int,input().split())
AB=[list(map(int,input().split())) for i in range(M)]
c=[[] for i in range(N)]
for a,b in AB:
    c[a-1].append(b-1)
from collections import deque
v=[0]*N
w=[0]*N
def f(p,q):
    q.append(p+1)
    v[p]=1
    w[p]=1
    d=set()
    for n in c[p]:
        if v[n]:
            d.add(n)
    while len(d)>1:
        x=q.popleft()
        d.remove(x)
        v[x]=0
    if len(d)==1:
        print(len(q),*q,sep='\n')
        exit()
    for n in c[p]:
        if v[n]==0:
            f(n,q)
    q.pop()
    v[p]=0
for p in range(N):
    if w[p]==0:
        f(p,deque())
print(-1)

### FIXED CODE ###

N,M=map(int,input().split())
AB=[list(map(int,input().split())) for i in range(M)]
c=[[] for i in range(N)]
for a,b in AB:
    c[a-1].append(b-1)
from collections import deque
import sys
sys.setrecursionlimit(10**9)
def f2(q):
    s=set(q)
    for a,b in AB:
        if a in s and b in s:
            i=q.index(b)
            if q[i-1]!=a:
                break
    if a in s and b in s and q[i-1]!=a:
        q2=deque([a,b])
        while q[(i+1)%len(q)]!=a:
            q2.append(q[(i+1)%len(q)])
            i+=1
        f2(q2)
    print(len(q),*q,sep='\n')
    exit()
v=[0]*N 
w=[0]*N
def f(p,v,q):
    v[p]=1
    w[p]=1
    q.append(p+1)
    for n in c[p]:
        if v[n]:
            f2(q)
        else:
            f(n,v,q)
    q.pop()
    v[p]=0
for p in range(N):
    if w[p]==0:
        f(p,v,deque())
print(-1)
# -*- coding: utf-8 -*-
s = str(input())
q = int(input())  
st = s
sth = s
sth2 = ""
stm = ""
stm2 = ""
count = 0
for i in range(q):
  k = input().split()
  if(k[0] == '1'):
    count = (count + 1) % 2
  else:
    c = count - 2
    d = int(k[1]) 
    e = k[2]
    if(c + d != 0):
      sth = e + sth
      if(len(sth) > 500):
        sth2 = sth
        sth = ""
    else:
      stm = stm + e
      if(len(stm) > 500):
        stm2 = stm
        stm = ""
      

st = sth + sth2 + stm2 + stm
if(count == 1):
  st = st[::-1]
  
print(st

### FIXED CODE ###

# -*- coding: utf-8 -*-
s = str(input())
q = int(input())  
st = s
sth = s
sth2 = ""
stm = ""
stm2 = ""
count = 0
flagh = 0
flagm = 0
for i in range(q):
  k = input().split()
  if(k[0] == '1'):
    count = (count + 1) % 2
  else:
    c = count - 2
    d = int(k[1]) 
    e = k[2]
    if(c + d != 0):
      sth = e + sth
      if(len(sth) > 5000 and flagh == 0):
        flagh = 1
        sth2 = sth
        sth = ""
    else:
      stm = stm + e
      if(len(stm) > 5000 and flagm == 0):
        flagm = 1
        stm2 = stm
        stm = ""
      

st = sth + sth2 + stm2 + stm
if(count == 1):
  st = st[::-1]
  
print(st)
n = input()
l = input()
print(abs(max(l) - min(l)))

### FIXED CODE ###


n = input()
a = input().split(" ")

l = list()
for x in a:
	l.append(int(x))

print(abs(max(l) - min(l)))
O=[]
E=[]
P=[]
Olength=int(input("Enter the length of odd Characters")
for i in range (o,Olength):
 x=input("ENTER cHARACTERS")
 O.append(x)
Elength=int(input("Enter the length of even Characters")
for i in range (o,Elength):
 x=input("ENTER cHARACTERS")
 E.append(x)
for i in range (o,Olength):
 P.append(O[i])
 P.append(E[i])

for i in range (o, P.length):
 print(P[i])

### FIXED CODE ###

def solve():
    o = input()
    e = input()

    try:
        for i in range(max(len(o), len(e))):
            print(o[i], end='')
            print(e[i], end='')
    except:
        pass


if __name__ == "__main__":
    solve()
n = int(raw_input())
A = map(int,raw_input().split())
q = int(raw_input())
m = map(int,raw_input().split())
  
def solve(i,m):
  if m == 0:
    return 1
  if i >= n or m - sum(A) > 0:
    return 0
  res = solve(i+1,m) or solve(i+1,m-A[i])
    return res
  
for j in range(q):
  if solve(0,m[j]):
    print "yes"
  else:
    print "no"

### FIXED CODE ###

n = int(raw_input())
A = map(int,raw_input().split())
q = int(raw_input())
m = map(int,raw_input().split())

def solve(i,m):
  if m == 0:
    return 1
  if i >= n or m - sum(A) > 0:
    return 0
  res = solve(i+1,m) or solve(i+1,m-A[i])
  return res

for j in range(q):
  if solve(0,m[j]):
    print "yes"
  else:
    print "no"
import heapq, math, sys

N, K = map(int, input().split())
A = sorted(list(map(int, input().split())), reverse=True)
maxA = A[0]
pre = -1
while len(A) != pre:
    if len(A) == 0:
        print(math.ceil(maxA))
        sys.exit()
    pre = len(A)
    meanA = math.ceil(sum(A)/(len(A)+K))
    for i, a in enumerate(A):
        if a <= meanA:
            A = A[:i]
            break


cuts = [0]*(i+1)
meanA = math.ceil(sum(A)/(len(A)+K))
for i, a in enumerate(A):
    cut_at_least = (a//meanA - 1)
    cuts[i] = cut_at_least
    K -= cut_at_least
hq = [(-a/(cut+1), i) for i, (a, cut) in enumerate(zip(A, cuts))]
heapq.heapify(hq)
for k in range(K):
    l, i = heapq.heappop(hq)
    cuts[i] += 1
    if k == 0:
        heapq.heappush(hq, (-A[i]/(cuts[i]+1), i))
l, i = heapq.heappop(hq)
print(math.ceil(-l))


### FIXED CODE ###

import heapq, math, sys

N, K = map(int, input().split())
A = sorted(list(map(int, input().split())), reverse=True)
maxA = A[0]
pre = -1
while len(A) != pre:
    if len(A) == 0:
        print(math.ceil(maxA))
        sys.exit()
    pre = len(A)
    meanA = math.ceil(sum(A)/(len(A)+K))
    for i, a in enumerate(A):
        if a <= meanA:
            A = A[:i]
            break


cuts = [0]*(i+1)
meanA = (sum(A)/(len(A)+K))
for i, a in enumerate(A):
    cut_at_least = (math.floor(a/meanA) - 1)
    cuts[i] = cut_at_least
    K -= cut_at_least
hq = [(-a/(cut+1), i) for i, (a, cut) in enumerate(zip(A, cuts))]
heapq.heapify(hq)
lenhq = len(hq)
for k in range(K):
    l, i = heapq.heappop(hq)
    cuts[i] += 1
    if k <= N:
        heapq.heappush(hq, (-A[i]/(cuts[i]+1), i))
l, i = heapq.heappop(hq)
print(math.ceil(-l))
import math

def solve():
    N = int(input())
    A = [int(x) for x in input().split(" ")]

    d = 10**9
    for i in range(1, N):
        d = min(math.gcd(A[0], A[1]), d)

    print(d)


if __name__ == "__main__":
    solve()

### FIXED CODE ###

def gcd(a, b):
    """ 最大公約数。aはbより大きいこと """
    if b == 0:
        return a
    else:
        return gcd(b, a%b)


def solve():
    N = int(input())
    A = [int(x) for x in input().split(" ")]

    A.sort(reverse=True)
    ans = A[0]
    for i in range(1, N):
        ans = gcd(ans, A[i])

    print(ans)


if __name__ == "__main__":
    solve()
# -*- coding: utf-8 -*-
n = int(input())
an= list(map(int, input().split()))

datas = [0] * n
for a in an:
    datas[a] += 1

for k in range(0,n):
    ans=0
    for i in range(1,n):
        if datas[i] > 1:
            if i == an[k]:
                ans += (datas[i]-1) * (datas[i]-2)/2
            else:
                ans += datas[i] * (datas[i]-1)/2
    print(int(ans))



### FIXED CODE ###

n = int(input())
an= list(map(int, input().split()))

datas = [0] * (n+1)
for a in an:
    datas[a] += 1

ans = 0
for i in range(1,n+1):
    if datas[i] > 1:
        ans += datas[i] * (datas[i]-1)/2
ans = int(ans)

for k in range(0,n):
    if datas[an[k]] > 1:
        print(int(ans - datas[an[k]] * (datas[an[k]]-1)/2 + (datas[an[k]]-1) * (datas[an[k]]-2)/2))
    else:
        print(ans)
A = input()

B = A.Upper()

if A == B:
    print("A")
else:
    print("a")

### FIXED CODE ###

A = str(input())

if A == A.upper():
    print("A")
else:
    print("a")
N, M = list(map(int, input().split()))
lst = [input().split() for lst in range(M)]
lst.sort(key=lambda x: x[0])
pn = 0
temp_pn = [] 
for _ in range(M):
  temp_pn.append(0)
cr = 0
plbnum = 0
for i in lst:
  a = int(i[0])
  if N >=  a > plbnum:
    if i[1] == "WA":
      temp_pn[a-1] += 1
    elif i[1] == "AC":
      cr += 1
      pn += temp_pn[a-1]
      plbnum = a
print(cr, pn)

### FIXED CODE ###

N, M = list(map(int, input().split()))
lst = [input().split() for lst in range(M)]
pn = 0
lst_pn = []
lst_cr = []
for _ in range(N):
  lst_pn.append(0)
  lst_cr.append(0)
cr = 0
for i in lst:
  a = int(i[0])
  if lst_cr[a-1] == 1:
    continue
  elif i[1] == "WA":
    lst_pn[a-1] += 1
  elif i[1] == "AC":
    cr += 1
    lst_cr[a-1] += 1
    pn += lst_pn[a-1]
print(cr, pn)
import collections

def dfs(node, parent, distance):
    depth[node] = distance
    for next_node, cost in Tree[node]:
        if next_node != parent:
            dfs(next_node, node, distance + cost)

N = int(input())

Tree = collections.defaultdict(list)

for i in range(N - 1):
    a, b, c = map(int, input().split())
    Tree[a].append((b, c))
    Tree[b].append((a, c))

q, k = map(int, input().split())

depth = {}
dfs(k, -1, 0)

for i in range(q):
    x, y = map(int, input().split())
    print(depth[x] + depth[y])


### FIXED CODE ###

import sys
import collections

sys.setrecursionlimit(int(1e7))

def dfs(node, parent, distance):
    depth[node] = distance
    for next_node, cost in Tree[node]:
        if next_node != parent:
            dfs(next_node, node, distance + cost)

N = int(input())

Tree = collections.defaultdict(list)

for i in range(N - 1):
    a, b, c = map(int, input().split())
    Tree[a].append((b, c))
    Tree[b].append((a, c))

q, k = map(int, input().split())

depth = {}
dfs(k, -1, 0)

for i in range(q):
    x, y = map(int, input().split())
    print(depth[x] + depth[y])
x = map(int.input().split())
a = int(x[0])
b = int(x[1])

if a < b:
  print('a < b')
elif a == b:
  print('a == b')
else:
  print('a > b')

### FIXED CODE ###

x = input().split()
i = list(map(int,x))
a = i[0]
b = i[1]

if a > b:
  print('a > b')
elif a == b:
  print('a == b')
else:
  print('a < b')
s = int(input())

log = set()
set.add(s)
for i in range(1001000):
    if s%2==0:
        s //=2
    else:
        s = 3*s+1

    if s in log:
        print(i+2)
        break

    log.add(s)

### FIXED CODE ###

s = int(input())

log = set()
log.add(s)
for i in range(1001000):
    if s%2==0:
        s //=2
    else:
        s = 3*s+1

    if s in log:
        print(i+2)
        break

    log.add(s)
# AtCoder Grand Contest 033
# https://atcoder.jp/contests/agc033
import sys

s2nn = lambda s: [int(c) for c in s.split(' ')]
ss2nn = lambda ss: [int(s) for s in list(ss)]
ss2nnn = lambda ss: [s2nn(s) for s in list(ss)]
i2s = lambda: sys.stdin.readline().rstrip()
i2n = lambda: int(i2s())
i2nn = lambda: s2nn(i2s())
ii2ss = lambda n: [sys.stdin.readline() for _ in range(n)]
ii2nn = lambda n: ss2nn(ii2ss(n))
ii2nnn = lambda n: ss2nnn(ii2ss(n))



def main():
    R, G, B, N = i2nn()
    #a = []
    cnt = 0
    R, G, B = sorted((R, G, B), revere=True)
    for r in range(N // R + 1):
        for g in range((N - R * r) // G + 1):
            #print([r, g, 0], N - R * r - G * g)
            if (N - R * r - G * g) % B == 0:
                cnt += 1
                #a.append([r,g,(N - R * r - G * g) // B])
    #print(a)
    print(cnt)
main()


### FIXED CODE ###

# AtCoder Grand Contest 033
# https://atcoder.jp/contests/agc033
import sys

s2nn = lambda s: [int(c) for c in s.split(' ')]
ss2nn = lambda ss: [int(s) for s in list(ss)]
ss2nnn = lambda ss: [s2nn(s) for s in list(ss)]
i2s = lambda: sys.stdin.readline().rstrip()
i2n = lambda: int(i2s())
i2nn = lambda: s2nn(i2s())
ii2ss = lambda n: [sys.stdin.readline() for _ in range(n)]
ii2nn = lambda n: ss2nn(ii2ss(n))
ii2nnn = lambda n: ss2nnn(ii2ss(n))



def main():
    R, G, B, N = i2nn()
    #a = []
    cnt = 0
    for r in range(N // R + 1):
        for g in range((N - R * r) // G + 1):
            #print([r, g, 0], N - R * r - G * g)
            if (N - R * r - G * g) % B == 0:
                cnt += 1
                #a.append([r,g,(N - R * r - G * g) // B])
    #print(a)
    print(cnt)
main()
(N,M),*AB=[list(map(int, x.split())) for x in open(0).readlines() if len(x)>1]
d={}
g=0
for a,b in AB:
    if a in d:
        d[b] = d[a]
    elif b in d:
        b[a] = d[b]
    else:
        g += 1
        d[a] = d[b] = g
for i in range(1,N+1):
    if not i in d:
        g += 1
print(g - 1)

### FIXED CODE ###

(N,M),*AB=[list(map(int, x.split())) for x in open(0).readlines() if len(x)>1]

class UnionFind:
    def __init__(self, n):
        self.n=n
        self.parents=[-1 for i in range(n)]

    def find(self, x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x] = self.find(self.parents[x])
            return self.parents[x]

    def union(self, x, y):
        rx = self.find(x)
        ry = self.find(y)
        if rx == ry:
            return
        if self.parents[rx] > self.parents[ry]:
            rx,ry=ry,rx
        self.parents[rx] = self.parents[ry]
        self.parents[ry] = rx

    def size(self, x):
        return -self.parents[self.find(x)]

    def same(self, x, y):
        return self.find(x) == self.find(y)

    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i) == root]

    def roots(self):
        return [i for i,x in enumerate(self.parents) if x < 0]

    def group_count(self):
        return len(self.roots())

    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()}


d=UnionFind(N)
for a,b in AB:
    d.union(a-1,b-1)
print(d.group_count() - 1)
bingo_list = [list(map(int,input().split())) for i in range(3)]
bingo_list = sum(bingo_list,[])
n = int(input())
bingo_number = [int(input())for i in range(n)]
check_list = [0 for i in range(9)]

for j in bingo_number:
    if j in bingo_list:
        check_list[bingo_list.index(j)] = 1

if [1,1,1]in [check_list[:3],check_list[3:6],check_list[6:],
             check_list[0:7:3],check_list[1:8:3]check_list[2:9:3],
             check_list[0:9:4],check_list[2:7:2]]:
    print('Yes')
else:
    print('No')

### FIXED CODE ###

bingo_list = [list(map(int,input().split())) for i in range(3)]
bingo_list = sum(bingo_list,[])
n = int(input())
bingo_number = [int(input())for i in range(n)]
check_list = [0 for i in range(9)]

for j in bingo_number:
    if j in bingo_list:
        check_list[bingo_list.index(j)] = 1

if  [1,1,1]  in [check_list[:3], check_list[3:6], check_list[6:], check_list[0:7:3], check_list[1:8:3],check_list[2:9:3],check_list[0:9:4],check_list[2:7:2]]:
    print('Yes')
else:
    print('No')
a=int(input())
b=int(input())
x=[1,2,3]
x=x.remove(a)
x=x.remove(b)
print(x[0])

### FIXED CODE ###

a=int(input())
b=int(input())
x=[1,2,3]
x.remove(a)
x.remove(b)
print(x[0])
b = input()
if b = "A":
    print("T")
if b = "T":
    print("A")
if b = "G":
    print("C")
if b = "C":
    print("G")

### FIXED CODE ###

b = input()
if b == "A":
    print("T")
if b == "T":
    print("A")
if b == "G":
    print("C")
if b == "C":
    print("G")
s=input()
n=len(s)
t=0
for i in range(n):
  if s[i]==p:
    t+=1
print(int(n/2)-t)

### FIXED CODE ###

s=input()
n=len(s)
t=0
for i in range(n):
  if s[i]=="p":
    t+=1
print(int(n/2)-t)
while 1:
H , W = map(int, raw_input().split())

if H == W == 0:
  break
width = ""
for i in range(W):
  width += "#"
for j in range(H):
  print width
    
    

### FIXED CODE ###

while 1:
  h, w = map(int, raw_input().split())
  if h == 0 and w == 0:
    break
  for i in range(h):
    print "#" * w
  print""
N=int(input())
s_arr=np.zeros(N, dtype=np.int8)
for i in range(N):
    s_arr[i]=int(input())

total=np.sum(s_arr)
if total%10!=0:
    print(total)
else:
    msk=(s_arr%10!=0)
    if np.sum(msk)==0:
        print(0)
    else:
        print(total-np.min(s_arr[msk]))

### FIXED CODE ###

import numpy as np

N=int(input())
s_arr=np.zeros(N, dtype=np.int8)
for i in range(N):
    s_arr[i]=int(input())

total=np.sum(s_arr)
if total%10!=0:
    print(total)
else:
    msk=(s_arr%10!=0)
    if np.sum(msk)==0:
        print(0)
    else:
        print(total-np.min(s_arr[msk]))