R.E.P.A.I.R. T.H.E. K.E.Y.B.O.A.R.D
Deadfish, all 35 characters, 444 bytes
Uses s, d, and c, which are allowed, plus i as an extra.
6 iisiiisiiiiic
7 iisiiisiiiiiic
8 iisiiisiiiiiiic
9 iiisdsdddddddc
0 iisiiisdc
- iisiiisddddc
= iiisdsdddc
y iiisiisc
u iiisiisddddc
i iiisisiiiiic
o iiisisiiiiiiiiiiic
p iiisiisdddddddddc
[ iiissiiiiiiiiiic
] iiisisdddddddc
h iiisisiiiic
j iiisisiiiiiic
k iiisisiiiiiiic
l iiisisiiiiiiiic
; iiisdsdddddc
' iisiisiiic
\ iiisisddddddddc
v iiisiisdddc
b iiisisddc
n iiisisiiiiiiiiiic
m iiisisiiiiiiiiic
^ iiisisddddddc
&amp; iisiisiic
* iisiisiiiiiic
( iisiisiiiic
) iisiisiiiiic
_ iiisisdddddc
+ iisiisiiiiiiic
: iiisdsddddddc
&quot; iisiisddc
| iiisiisiiic

Unless I did my coding wrong, I believe these are necessarily optimal.
Here is the meta-golfer
Explanation
I do a pretty simple BFS by creating a priority queue that orders by length first (so the golfiest solution is always found) and state second (so that it doesn't waste time on ridiculously large numbers caused by repeated application of s). Also, I track a visited set to prevent revisiting values with suboptimal-length code.
Then, each time, I just add the state transitions (L,x,c)-&gt;(L+1,x+1,c+&quot;i&quot;), (L,x,c)-&gt;(L+1,x-1,c+&quot;d&quot;), and (L,x,c)-&gt;(L+1,x*x,c+&quot;s&quot;) where L is the code length, x is the current number, and c is the current code.
My meta-golfer code is fully commented if you want a more detailed explanation.