g | x | w | all
Bytes Lang Time Link
025Vyxal240523T234539Zemanresu
037Jelly210217T211808Zcaird co
124Perl151006T102902Zprimo
049Pyth151006T032647ZBrian Tu
058Pyth151005T212317ZFryAmThe
188Python 3151005T145620ZSp3000

Vyxal, 25 bytes

₀+æ[λS₅ʀ?vṀ⌊JæA;₁ȯ|`∵Ǒ ƛ£

Try it Online! (first 5)

   [                      # If
₀+                        # 10+input
  æ                       # Is prime
                 ȯ        # Find the first
                ₁         # 100
    λ          ;          # positive integers where
              A           # All of
            J             # n and
        ?                 # Input digit
         vṀ               # Inserted at
       ʀ                  # Indices 0..
      ₅                   # len(input)
     S                    # In str(input)
           ⌊              # Converted back to integers 
             æ            # Are prime? 
                  |       # Otherwise
                   `∵Ǒ ƛ£ # "Empty Set"

Jelly, 37 bytes

D-ṭJœṖ€$j€Ṗ€ḌẒȦ
1Ẓ×çɗȷ2#µ“¬ḟ¦⁻v»ẇ?⁽¢°

Try it online! (takes the first 10 instead of 100)

How it works

D-ṭJœṖ€$j€Ṗ€ḌẒȦ - Helper link. Takes n on the left and d on the right
D               - Digits of n
 -ṭ             - Append -1; Call this D
       $        - To the digits:
   J            -   Indices; Yield [1, 2, ..., len(D)]
      €         -   Over each index i:
    œṖ          -     Partition D at the index i
        j€      - Join each with d
          Ṗ€    - Remove the -1s
            Ḍ   - Convert back to integers
             Ẓ  - Is prime?
              Ȧ - True for all?

1Ẓ×çɗȷ2#µ“¬ḟ¦⁻v»ẇ?⁽¢° - Main link. Takes a digit d on the left
                 ?    - If statement:
                ẇ ⁽¢° -   Condition: d is one of 1,3,7,9?
        µ             -   Then:
    ɗ                 -     Define a dyad f(n, d):
 Ẓ                    -       n is prime?
  ×                   -       and
   ç                  -       the helper link is true
1    ȷ2#              -     Count up k = 1, 2, ... and return the first 100 k for
                             which f(k, d) is true
         “¬ḟ¦⁻v»      -   Else: Return "Empty Set"

Perl, 124 bytes

$p=prime_iterator;y/1379//or$i=+~print'Empty Set'}while($i<100){$_=&$p;is_prime"$`@F$'"or redo while//g;$i++

Requires the following command line option: -palMntheory=:all, counted as 16. Input taken from stdin.

Uses @DanaJ's Math::Prime::Util module for perl (loaded with the pragma ntheory). Get it with:

cpan install Math::Prime::Util
cpan install Math::Prime::Util::GMP

is_prime is deterministic for all values less than 264, which is sufficient for our purposes.


Sample Usage

$ echo 2|perl -palMntheory=:all oscary.pl
Empty Set

$ echo 7|perl -palMntheory=:all oscary.pl
3
19
97
433
487
541
691
757
853
1471
.
.
.
718705783
720574573
737773357
745157779
747215167
767717017
768743377
770294977
771778477
774577777

Expected Runtimes

x = 1 : 1m 09.2s
x = 3 : 0m 04.2s
x = 7 : 2m 52.5s
x = 9 : 0m 11.5s

Pyth, 49 bytes

Like the Python3 and other Pyth answer, the runtime for finding 100 numbers is prohibitive. (test suite gives 10)

?}z"1379".f&!tPZ!|FmtPvjzc`Z]dhl`Z*TT3"Empty Set"

Try it online

Pyth, 58

L}bPb|*"Empty Set"}Qj204568T.f&yZ.Amyi++<JjZTdQ>JdThl`Z100

This test suite only calculates the first 10 numbers because it takes far too long to generate the rest. Brute forces both primality and the inserting of the digits. Demonstrates such bad performance that I haven't been able to run it up to 100, so please tell me if there are problems.

Python 3, 188 bytes

x=input()
k=1
i=100
if x in"024568":i=print("Empty Set")
while i:k+=1;s=str(k);i-=all(sum(p%d<1for d in range(2,p))<4for p in[k*int(s[:j]+x+s[j:])for j in range(len(s)+1)])and not print(k)

Badly golfed, but here's something for now. Instead of checking p in P and F(z,p) subset of P, we check that p*f is a semiprime for each f in F(z,p). Combine that with trial division for primality testing, and you get an O(scary) algorithm.