Whew. I sent forth a plea for the nearest passing moderator to change that whole first post to example.com so people can see what you're asking about. The normal reaction to the word ".htaccess" is to remember an urgent appointment elsewhere, but eventually someone got brave.
So you want to redirect
all occurrences of
www.example.com
to
www.subdomain.example.com
excluding four specific urls? I assume www.example.com means www.example.com/index.something, but do "contact", "about" and "store" refer to directories with index pages, or to extensionless page urls that you're rewriting elsewhere?
Bookmark this page [httpd.apache.org] if you haven't already done so. The tricky part in your case is that by default rewrites operate on the part of the address
after the domain name (and before the query string) so you need to put the old name into a condition:
RewriteCond ${HTTP_HOST} www.example.com
RewriteCond %{REQUEST_URI} !^(index\.\w+)?$
RewriteCond %{REQUEST_URI} !^contact/(index\.\w+)?$
RewriteCond %{REQUEST_URI} !^about/(index\.\w+)?$
RewriteCond %{REQUEST_URI} !^Store/(index\.\w+)?$
replacing the "index\.\w+" part with the actual name of your index files-- htm, php or whatever-- which may or may not be part of the request, depending on how it arrived (link, type-in etc).
The removed prefix always ends with a slash, meaning the matching occurs against a string which never has a leading slash. Therefore, a Pattern with ^/ never matches in per-directory context.
(Sorry, I had to quote that because I always forget it myself.
No leading slash!)
RewriteRule (.+) ht
tp://www.subdomain.example.com/$1 [R=301,L]
:: prolonged detour here as I send a typo report to Apache and then find a page blasphemously headed "When not to use mod_rewrite" :o ::