Draw Concentric ASCII Hexagons Write the shortest program possible that takes in a set of distinct positive integers and outputs an ASCII rendering of concentric hexagons with those side lengths, made from slashes, underscores, spaces, and newlines.
The shortest program in bytes as counted by https://mothereff.in/byte-counter wins.
Examples
(They look better with less line spacing.)
If the input is 1 the output should be the hexagon with side length 1:
 __ 
/  \
\__/

Notice that two underscores are used for the top and bottom of the hexagon so it is better proportioned.
In general, the size N hexagon contains N slashes on each angled side and 2*N underscores on on both the top and bottom.
If the input is 1 2 the output should be the concentric hexagons with side length 1 and 2:
  ____
 / __ \
/ /  \ \
\ \__/ /
 \____/

If the input is 1 3 the output should be:
   ______
  /      \
 /   __   \
/   /  \   \
\   \__/   /
 \        /
  \______/

If the input is 1 3 2 the output should be:
   ______
  / ____ \
 / / __ \ \
/ / /  \ \ \
\ \ \__/ / /
 \ \____/ /
  \______/

etc.
I/O Rules
Input must come from either the command line or stdin but may be in whatever format is most convenient.
For example, you might give each number as a command line argument: &gt; myprogram 1 3 2, or you might prompt the user to input the numbers as a preformatted list: [1, 3, 2].
Output must go to stdout or your language's closest equivalent.
Additional Rules

The input will always be a set of distinct positive integers, not necessarily in any order.
The output must...

not contain any characters besides /\ _ and newlines.
have no trailing spaces or unnecessary leading spaces.
not contain extraneous leading newlines but may have one optional trailing newline.


If nothing is input then output nothing (except possibly one newline).
If it helps you may assume that the input integers are less than 216.
Python - 251, 240, 239 228

l=input()+[0];m=max(l);A=abs;R=range
for j in R(2*m+1):print''.join([[' \\'[(A(j-i+m-1)/2.in l)*(2*m-i)/(j-m-.5)&gt;1],'/'][(A(3*m-i-j)/2.in l)*(i-m-j+.5)/(j-.5-m)&gt;0],'_'][(A(m-j)in l)*(A(2*m-i-.5)&lt;A(m-j))]for i in R(4*m)).rstrip()




Alternative approach (251):

l=input()+[0]
l.sort()
m=max(l)
M=2*m
s=[[' ']*m*4for j in' '*(M+1)]
for i in l:
 I=2*i;s[m-i][M-i:M+i]=s[m+i][M-i:M+i]='_'*I
 for k in range(i):K=k+1;s[m-k][M-I+k]=s[m+K][M+I-K]='/';s[m-k][M+I-K]=s[m+K][M-I+k]='\\'
for t in s:print''.join(t).rstrip()